使用 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 重写规则的问题的主要内容,如果未能解决你的问题,请参考以下文章

Apache 重写规则,可以使用或不使用斜杠

Apache rewrite地址重写

为 Apache 重写规则没有找到 URL?

如何为 GET 请求正确配置 Apache 重写规则?

带有代理和排除的 html5 pushstate 的 Apache 重写规则

apache重写规则可以进入httpd.conf吗