问题如下:
我正在执行 URL 重写以从带有参数的 URL 创建规范的 URL。例如:
RewriteRule ^somename/(.*)/(.*.html)$ index.php?pram1=someparam¶m2=$1¶m3=$2 [QSA,L]
现在,我还要检查页面是否使用 https 协议,如果没有,则进行 301 重定向。
问题:Apache 在使用 REQUEST_URI 时似乎无法识别新的(规范 URL)。相反,REQUEST_URI 返回 index.php?... URL。
这使得无法获取当前(规范 URL)、检查 HTTPS 并在必要时重定向到它。
例如,
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (somename)
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]
根本不起作用,因为 (somename) 不在 URI 中(请记住,{REQUEST_URI} 包含原始 URL)。
我可以匹配 QUERY_STRING,但重定向会将我带到原始 URL
RewriteCond %{HTTPS} off
RewriteCond %{QUERY_STRING} (param1)
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]
在过去的一个小时里,我一直在互联网上寻找解决方案,但我想不出什么办法。我想也许有一种方法可以创建一个环境变量来保存新的(规范)URL,但是也没有找到一种方法来做到这一点。
任何可能有帮助的建议?