我正在运行带有 apache2 和 libapache2-mod-php5 5.3.3-7 的 Debian Linux。
我有一个 VirtualHost 需要 php4。因此我研究并编译了 php4-cgi。
然而,我似乎无法:
- 覆盖该 vhost 中 mod-php5 的 .php 映射(甚至是全局覆盖,无需完全禁用 php)。
- 甚至找到映射的位置,希望禁用它并为每个 vhost 启用 mod-php5 或 php4-cgi。
这是我的 php4-cgi 映射(在一个 php4 vhost 内部):
ScriptAlias /php4 /usr/local/php4/bin
<Directory /usr/local/php4/bin>
Options +ExecCGI +FollowSymLinks
</Directory>
<Directory /www/test>
AddHandler php4-cgi-script .php
Action php4-cgi-script /php4/php
Options +ExecCGI
</Directory>
这不起作用,mod-php5 仍会运行该 vhost/directory 中的所有 .php 文件。如果我将上面的 AddHandler 中的文件扩展名从 .php 更改为 .php4,则 .php4 文件会按预期运行 php4-cgi,但我无法将应用程序中的所有文件更改为 .php4。
我想也许我可以在我的 vhost 或目录中禁用 mod-php5 的映射,然后执行我的 cgi-config(如上所述),但是在不同上下文中这些的许多组合都没有起作用:
RemoveHandler .php
RemoveType .php
php_flag engine off (this seems to even disable my php4-cgi so that wont work)
我可以找到任何映射的唯一其他地方是在 /etc/mime.types 中,但注释掉相关行并重新启动 apache2 不会影响 mod-php5 的 .php 映射。
我已经尽我所能地搜索了,但它对我来说现在还是一个谜。
任何帮助或指导都将不胜感激。
答案1
对于大多数 Linux 发行版来说,mod_php 的默认配置位于 conf.d/ 和/或 mods-available/ 下的 apache 目录中(例如:/etc/apache2/conf.d/php5.conf 或 /etc/apache2/mods-available/mod-php5),其中处理程序被全局定义为服务器范围。
您要么必须更改配置以在每个 vhost 上启用 php5/php4,要么在全局服务器范围内定义不同的扩展名(例如为 php4 处理程序定义 .php4),这取决于您拥有的 vhost 数量,这可能会或可能不会有吸引力。
答案2
您可以将 ScriptAlias 与 Action 一起使用 - 我之前曾在此处写过关于如何执行此操作的文章:http://tales.itnobody.com/2009/05/running-parallel-versions-of-php-part-2.html
您最终会得到以下结果:
ScriptAlias /php5.3 /path/to/php/bin
Action application/php5.3 /php5.3/php-cgi