Apache-2.2
本地 .htaccess 奇怪地允許在共享主機環境下在 Apache 中以 CGI/FastCGI 模式執行 PHP
我正在使用共享網路託管服務。執行 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 結構,以維護記憶體在搜尋引擎中的舊連結。