Apache mod_rewrite:对已经进行URL重写的URL执行http到https重定向
问题如下: 我正在执行URL重写,以从带有参数的URL创建规范URL。例如:Apache mod_rewrite:对已经进行URL重写的URL执行http到https重定向,apache,mod-rewrite,http-status-code-301,Apache,Mod Rewrite,Http Status Code 301,问题如下: 我正在执行URL重写,以从带有参数的URL创建规范URL。例如: RewriteRule ^somename/(.*)/(.*.html)$ index.php?pram1=someparam¶m2=$1¶m3=$2 [QSA,L] 现在,我还想检查页面是否使用https协议,如果没有,则进行301重定向 问题:当使用请求URI时,Apache似乎无法识别新的(规范URL)。相反,REQUEST_URI返回index.php?。。。网址 这使得无法获
RewriteRule ^somename/(.*)/(.*.html)$ index.php?pram1=someparam¶m2=$1¶m3=$2 [QSA,L]
现在,我还想检查页面是否使用https协议,如果没有,则进行301重定向
问题:当使用请求URI时,Apache似乎无法识别新的(规范URL)。相反,REQUEST_URI返回index.php?。。。网址
这使得无法获取当前(规范URL)、检查HTTPS并在必要时重定向到它
比如说,
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (somename)
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]
根本不起作用,因为(somename)不在URI中(请记住,{REQUEST_URI}保存原始URL)
我可以匹配查询字符串,但重定向会将我带到原始URL
RewriteCond %{HTTPS} off
RewriteCond %{QUERY_STRING} (param1)
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]
在过去的一个小时里,我一直在互联网上寻找解决办法,但我想不出什么办法。我想也许有一种方法可以创建一个环境变量来保存新的(规范的)URL,但也没有找到一种方法
有什么建议可能有用吗
根本不起作用,因为(somename)不在URI中(请记住,{REQUEST_URI}保存原始URL)
不正确,%{REQUEST\u URI}
实际上是当前URI,在URL文件映射处理管道中通过mod\u rewite或其他模块进行任何损坏之后。您想要的可能是%{THE_REQUEST}
:
RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(somename/[^\ ]*)
RewriteRule ^ https://%{SERVER_NAME}/%1 [R=301,L]
然而,我怀疑这不是真正的问题。问题是您放置规则的顺序,并且重定向没有L
标志。这应该满足您的要求:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
RewriteRule ^somename/(.*)/(.*.html)$ index.php?pram1=someparam¶m2=$1¶m3=$2 [QSA,L]