【问题标题】:.htaccess error - ERR_TOO_MANY_REDIRECTS.htaccess 错误 - ERR_TOO_MANY_REDIRECTS
【发布时间】:2018-02-15 12:24:55
【问题描述】:

我有这个 .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>

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite http-status-code-500


    【解决方案1】:
    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 规范重定向。你不需要第一条规则。你也不需要&lt;IfModule&gt; 容器。

    仅当您确定它工作正常时,才将 302 更改为 301

    确保您在测试前已清除浏览器缓存。 301 被浏览器硬缓存。


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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 2012-05-19
      相关资源
      最近更新 更多