使用 apache 重写规则的问题
Posted
技术标签:
【中文标题】使用 apache 重写规则的问题【英文标题】:Problems using apache rewriterules 【发布时间】:2017-02-05 08:23:11 【问题描述】:您好,这是我的重写条件:
LogLevel alert rewrite:trace3
RewriteEngine On
RewriteCond %HTTPS off
RewriteRule ^/(myapp)/ - [E=MY_URL:1]
RewriteCond %ENV:MY_URL 1
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI
我正在尝试将所有内容重定向到 http://www.example.com/myapp/ 到https://www.example.com/myapp/,但似乎我陷入了无限循环,我尝试设置 2 个条件,所以如果 HTTPS 是在它上面不应该重定向,任何帮助将不胜感激,谢谢!
更新 1 我把它改成下面的
RewriteCond %HTTPS off
RewriteCond %REQUEST_URI ^/myapp
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [R=301]
我不明白 [R=301] 部分,但它仍然给我 ERR_TOO_MANY_REDIRECTS 错误
【问题讨论】:
您没有进行客户端重定向。没有[R=301]
,所以它纯粹是内部重写。因为它只是内部的,所以你进入 no-ssl,设置你的 env var,然后你重新进入重写,那个 env var 仍然设置。
我更新了帖子,我删除了环境变量
r=301
向客户端发送一个 http 301 重定向标头,说“去这里”,这是您的新 https 网址。没有它,你只是在做“内部 apache”内部重写,客户端本身将继续使用非 ssl 请求。
【参考方案1】:
好的,感谢一位朋友和link,我弄明白了,
RewriteCond %HTTP:X-Forwarded-Proto !https
RewriteCond %REQUEST_URI ^/myapp
RewriteRule ^(.*)$ https://%HTTP_HOST%REQUEST_URI [L,R=301]
我不知道为什么RewriteCond %HTTPS off
在我的规则上不起作用(apache 2.4),所以我改用%HTTP:X-Forwarded-Proto !https
,就像一个魅力
【讨论】:
以上是关于使用 apache 重写规则的问题的主要内容,如果未能解决你的问题,请参考以下文章