.htaccess错误 - ERR_TOO_MANY_REDIRECTS

3 apache .htaccess redirect environment-variables http-status-code-500

我有这个.htaccess文件重定向http://https://
我也做www.了根域重定向!
www.到根域工作!但是https://重定向不行!如果我设置RewriteCond %{HTTPS} onRewriteCond %{HTTPS} offRewriteCond %{HTTPS} =!on我收到浏览器错误:

example.com页面无效

mysite.com重定向了你太多次了.

尝试清除您的cookie.

ERR_TOO_MANY_REDIRECTS


我做过的一次编辑给了我一个500错误,但我还原回到之前的状态!我所做的就是改变:RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}RewriteRule(.*) https://%{HTTP_HOST}%{REQUEST_URI}RewriteRule (.*)https://%{HTTP_HOST}%{REQUEST_URI}

任何人都有任何关于如何解决这个问题的想法?

这是我的整个.htaccess档案!

<IfModule mod_rewrite.c>
 RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{HTTPS} on          [OR]
RewriteCond %{HTTP_HOST} ^www\.   [NC]
RewriteRule ^ https://antimalwareprogram.co%{REQUEST_URI}     [R=301,L,NE]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

MrW*_*ite 7

RewriteCond %{HTTPS} on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

是的,这将创建一个重定向循环.逻辑错了.这说的是......如果HTTPS"打开",那么重定向到HTTPS.你应该检查HTTPS是否"关闭"(或"不开启",即.!on).

(通过删除您可能创建重写循环的参数之间的空格,因此500错误.空格是Apache配置文件中的分隔符.)

尝试类似以下内容:

RewriteEngine On
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [R=302,L,NE]
Run Code Online (Sandbox Code Playgroud)

这会处理HTTPS和www规范重定向.您不需要第一条规则.你也不需要<IfModule>容器.

更改302301只有当你确定它工作正常.

确保在测试之前清除了浏览器缓存.301s被浏览器高速缓存.


更新:如果这仍然给你相同的错误(重定向循环),那么你的SSL可能是由前端代理管理的,而不是你的应用服务器.如果是这种情况,那么您将无法使用HTTPS服务器变量.请参阅以下相关问题:


在这种情况下,似乎ENV:HTTPS需要使用(环境变量)来代替HTTPS(Apache服务器变量).但请注意,这是非标准/服务器特定的,因为它意味着正在使用前端代理来管理SSL.

  • 我修复了这个:`RewriteCond%{ENV:HTTPS}!= on RewriteRule(.*)https://%{HTTP_HOST}%{REQUEST_URI} [R = 301,L]`我添加了`ENV:HTTPS`请如果这个问题仍然是一个好问题,那么就接受这个问题,接受你的回答,并且无论如何都要支持你! (3认同)