我正在使用共享网络托管服务。运行 phpinfo,我可以看到服务器 API 显示的是 CGI/FastCGI,而不是 Apache 2 Handler。
在本文中: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 模式下运行正常。为什么会发生这种情况?
答案1
问题不在于当.htaccess
PHP 作为 CGI 而不是 Apache 模块运行时,文件中的 Apache 重写规则不起作用。问题.htacess
在于当 PHP 作为 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 结构,以维护搜索引擎中缓存的旧链接。