我们正在尝试将安装迁移到 Apache 事件引擎,用 PHP-FPM 替换 mod_php。我们有一个由 apache 从旧 URL 执行的复杂重写列表,并生成 SEO 友好的 URL,如下所示:
#Ej: /holidays/costa-del-sol/nombre-99.html
RewriteRule ^/holidays/([^/])/([^/])-([\d]+)\.html$ /scripts/pack.php?package=$3&lang=eng [QSA,P,E=notAllowedParams:package-region-regionname-lang,E=ORIG_URI:/$1]
但此外,我们的 PHP 还确认客户端使用的 URL 有效,否则执行重定向。为此,我们评估 $SERVER REQUEST_URI 变量,但此变量现在错误地设置为第二个“脚本”URL,而不是源。
这是...Apache 收到 URL X 的请求,在内部重写(无 301)到 Y 地址。使用 mod_php 时,这对 PHP 来说是透明的,但现在当我们“代理”到 PHP-FM 时,会调用 Y 脚本(因此会执行重写),但我们找不到强制 PHP 维护和接收 REQUEST_URI 值的方法。
我们的 PHP-FPM Apache 配置
<FilesMatch \.php$>
# 2.4.10+ can proxy to unix socket
# SetHandler "proxy:unix:/var/run/php5-fpm.sock|fcgi://localhost/"
# Else we can just use a tcp socket:
SetHandler "proxy:fcgi://127.0.0.1:9001"
</FilesMatch>
ProxyPassMatch ^/(.\.php(/.)?)$ fcgi://127.0.0.1:9001/${GIS_JOSE}/www/$1 enablereuse=on
我们尝试了各种方法来保留该值,但没有成功:
ProxyPreserveHost On
ProxyRequests Off
ProxyFCGISetEnvIf "true" REQUEST_URI "%{reqenv:REQUEST_URI}"
RewriteOptions InheritBefore
我们怀疑这是否不可能,或者我们遗漏了有关执行顺序的某些内容。