我有这个.htaccess文件来将http://
重定向到https://
我还做了www.
到根域重定向!www.
到根域工作!但是https://
重定向不工作!如果我将RewriteCond %{HTTPS} on
设置为RewriteCond %{HTTPS} off
或RewriteCond %{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条答案
按热度按时间wfsdck301#
是的,这将创建一个重定向循环。逻辑是错误的。它说的是...如果HTTPS是“开”,那么重定向到HTTPS。你应该检查HTTPS是否是“关”(或“不开”,即
!on
)。(By删除参数之间的空格可能会创建一个重写循环,因此出现500错误。空格是Apache配置文件中的分隔符。)
请尝试以下操作:
它处理HTTPS和www规范重定向,你不需要第一条规则,也不需要
<IfModule>
容器。只有在确定
302
工作正常时,才将其更改为301
。确保在测试之前已经清空了浏览器缓存。301会被浏览器硬缓存。
**UPDATE:**如果仍然出现相同的错误(重定向循环),则可能是SSL由前端代理管理,而不是由应用服务器管理。如果是这种情况,则无法使用
HTTPS
服务器变量。请参阅以下相关问题:在这种情况下,似乎需要使用
ENV:HTTPS
(环境变量)来代替HTTPS
(Apache服务器变量)。但是,请注意,这不是标准/服务器特定的,因为它意味着使用前端代理来管理SSL。