.htaccess错误 - ERR_TOO_MANY_REDIRECTS

时间:2017-09-06 21:56:12

标签: apache .htaccess redirect environment-variables http-status-code-500

我有.htaccess文件将http://重定向到https://
我也根据域重定向www.进行了操作!
www.根域工作!但是https://重定向不是! 如果我将RewriteCond %{HTTPS} on设置为RewriteCond %{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>

1 个答案:

答案 0 :(得分:5)

RewriteCond %{HTTPS} on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

是的,这将创建一个重定向循环。逻辑错了。这说的是......如果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]

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

只有在您确定其工作正常时,才能将302更改为301

确保在测试前清除了浏览器缓存。 301s被浏览器严格缓存。

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

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