我怎样才能通过 VirtualHost 或目录覆盖 mod-php5 的 .php 到 php4-cgi 的映射?

我怎样才能通过 VirtualHost 或目录覆盖 mod-php5 的 .php 到 php4-cgi 的映射?

我正在运行带有 apache2 和 libapache2-mod-php5 5.3.3-7 的 Debian Linux。

我有一个 VirtualHost 需要 php4。因此我研究并编译了 php4-cgi。

然而,我似乎无法:

  1. 覆盖该 vhost 中 mod-php5 的 .php 映射(甚至是全局覆盖,无需完全禁用 php)。
  2. 甚至找到映射的位置,希望禁用它并为每个 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

相关内容