奇怪的是,本地 .htaccess 允许在共享主机环境下的 Apache 中以 CGI/FastCGI 模式运行 PHP

奇怪的是,本地 .htaccess 允许在共享主机环境下的 Apache 中以 CGI/FastCGI 模式运行 PHP

我正在使用共享网络托管服务。运行 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

问题不在于当.htaccessPHP 作为 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 结构,以维护搜索引擎中缓存的旧链接。

相关内容