让 apache 根据 URL 中的扩展名选择一个 php 版本,但文件系统上只有一个文件

让 apache 根据 URL 中的扩展名选择一个 php 版本,但文件系统上只有一个文件

我想配置一个本地 apache 服务器来为不同版本的 php 文件提供服务。在我的文档根目录中,我有phpinfo.php,现在如果我转到http://localhost/phpinfo.php4,我想查看使用 php4 处理的 phpinfo.php 文件,如果我转到,http://localhost/phpinfo.php5我想查看使用 php5 处理的同一文件。

注意:php 4 和 5 已经同时安装,我可以毫无问题地配置 apache 来处理具有.php4.php5扩展名的文件在文件系统上使用正确的 php 版本。我希望 apache 执行以下操作:

  • 如果 url 路径以 结尾,则使用处理程序提供文件系统上.php5具有扩展名的文件。 .phpapplication/x-httpd-php5
  • 如果 url 路径以 结尾,则使用处理程序在文件系统上.php4提供带有扩展名的相同文件。.phpapplication/x-httpd-php4

答案1

经过反复尝试,我终于找到了答案。魔法咒语如下:

RewriteEngine on
RewriteRule ^(.*)\.php5$ $1.php [H=application/x-httpd-php,PT]
RewriteRule ^(.*)\.php4$ $1.php  [H=php4,PT]

其中application/x-httpd-php是 mod_php5 注册的默认处理程序,php4是调用 php4 的自定义 cgi 处理程序。我最难搞清楚的部分是PT(passthrough) 标志,这是 cgi 处理程序工作所必需的。PT 使执行 url 重写的其他模块也执行其工作,mod_cgi 就是这样一个模块。

相关内容