php - PHP 无法使用在 Apache + PHP-fpm 中没有“php”扩展且没有“R”标志的重写规则
问题描述
我们目前正在尝试在 Docker 环境中通过 php-fpm 和 mod_proxy_fcgi 将我们的 Web 服务器切换到使用 PHP 运行的 apache 2.4。
我们曾经在 Apache 配置中有如下 URL 重写规则,它与之前的“mod_php”设置配合得很好:
RewriteRule ^/test$ /test.php [QSA
]
但是,一旦我们切换到 Apache 2.4 + PHP-FPM 并在 Apache 配置中进行以下设置,php 将停止为该 URL (/test) 工作:
RewriteEngine On
RewriteRule ^/test$ /test.php [QSA]
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://php:9000/var/www/html/$1
使用此设置,URL http:///test 会在屏幕上显示一个纯文本,显示“test.php”的内容,这意味着该页面根本没有被输入 PHP;但是,如果我将重写规则标志从“QSA”更改为“R”,PHP 开始工作,一切都很好。
当“R”不存在时,似乎“ProxyPassMatch”行在 RewriteRule 之前执行。那么如果是这样的话,有没有人可以解决这个问题?我敢肯定有很多网站使用干净的 URL,通常没有“php”扩展名,用于 PHP 页面......
提前致谢。
解决方案
我认为这与 QSA 没有像 R 那样进行 30x HTTP 重定向这一事实有关,因此没有第二个请求(如使用 R 修饰符),因此最后没有带有 .php 的请求,因此这不是馈送到 PHP 解释器。作为一个快速的解决方案,我会考虑修改正则ProxyPassMatch
表达式以添加测试和任何其他非 PHP 结束 URL,以提供给 PHP
推荐阅读
- c - C Replacing Variable Number
- javascript - Fire a CustomEvent from element in dom-repeat
- sd-card - 为什么 File.mkdirs() 创建两个目录而不是一个?
- c# - 将文档与 Xceed Docx 合并后,标题会丢失样式
- java - 需要详细了解“@”符号如何在 google cloud apache 梁代码中使用
- arrays - 获取与字符串匹配的所有数组/映射条目
- c# - 由块组成的 Linq 组
- java - 导入 bsh.This;eclipse中的声明
- android - 需要 Unity3D Gradle 版本 2.10
- wordpress - 登录错误消息显示在 Url - WooCommerce