【问题标题】:Problems using apache rewriterules使用 apache 重写规则的问题
【发布时间】: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 请求。

标签: apache redirect httpd.conf


【解决方案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,就像一个魅力

【讨论】:

    猜你喜欢
    • 2014-09-26
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多