Apache-2.2

本地 .htaccess 奇怪地允許在共享主機環境下在 Apache 中以 CGI/FastCGI 模式執行 PHP

  • October 20, 2010

我正在使用共享網路託管服務。執行 phpinfo,我可以看到伺服器 API 顯示 CGI/FastCGI 而不是 Apache 2 處理程序。

在這篇文章中: http: //docs.joomla.org/Should_PHP_run_as_a_CGI_script_or_as_an_Apache_module%3F

它說“如果您的伺服器配置為將 PHP 作為 Apache 模組執行,那麼您可以選擇使用 php.ini 或 Apache .htaccess 文件,但是,如果您的伺服器以 CGI 模式執行 PHP,那麼您將只有選擇在本地使用 php.ini 文件來更改設置,因為 Apache 不再完全控制 PHP。

我認為我創建的 .htaccess 中的重寫規則在 CGI 模式下執行時執行良好,這真的很奇怪。為什麼會這樣?

問題不在於.htaccess文件中的 Apache 重寫規則在將 PHP 作為 CGI 與 Apache 模組執行時不起作用。.htacess只是當它作為 CGI 執行時,您不能使用該文件來設置 PHP 值。相反,您必須有一個單獨的 php.ini 文件,其中更改了您的設置。在我自己的共享主機帳戶中,將 PHP 作為 CGI 執行,我使用 FastCGI 並在我的.htaccess文件中有以下內容:

<IfModule !mod_php.so>
   AddHandler myphp-script .php
   Action myphp-script /cgi-bin/myphp.fcgi
</IfModule>

然後在我的帳戶/cgi-bin/目錄中,我放置包含以下內容的myphp.fcgi腳本chmod 755

#!/bin/sh

# This ensures PHP doesn't try to run it's own
# process manager.  
export PHP_FCGI_CHILDREN=0

# Execute PHP with my php.ini config file
exec /path/to/system/cgi-bin/php -c ~/myconf/php.ini

我的文件中仍有一個 <IfModule mod_rewrite.c>部分.htaccess用於處理將一些舊 URI 路徑重寫為新 URI 結構,以維護記憶體在搜尋引擎中的舊連結。

引用自:https://serverfault.com/questions/110490