我在一个htaccess重定向中有以下代码,我从另一个工作中复制,它工作得很好。任何人都可以看到这个问题吗?
<IfModule mod_rewrite.c>
Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site-url.com$
RewriteRule ^(.*)$ http://www.site-url.com/$1 [R=301]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
所以基本上我是从http://site-url.com重定向到http://www.site-url.com然后如果不是https我会重定向到https。
服务器提供商表示他们不支持足够公平的代码,但我已尝试过所有内容,无论网站在无限循环中遇到什么问题。似乎服务器不承认
RewriteCond %{HTTPS} !=on
但我也尝试了
RewriteCond %{SERVER_PORT} !^443$
并得到同样的问题。
有没有人有建议或者这可能是服务器的配置问题?如果是这样,任何人都可以指出它可能是什么?
由于
杰森
答案 0 :(得分:0)
你可以尝试:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} != on [NC]
RewriteRule ^(.*)$ https://www.site-url.com$1 [L,R=301]
答案 1 :(得分:0)
你的问题是双重的。
首先,您的第一条规则是重定向到http://
。其次,您的第一条规则是缺少L
。它们共同创建了一种情况,当您请求http://site-url.com/something
时,将应用第一个规则,并将请求标记为重定向到http://www.site-url.com/something
。但是如果没有L
标志,第二条规则会立即得到处理并被应用(因为它不是HTTPS),因此它会取代第一条规则的重定向目标,并将其重定向到https://site-url.com/something
。
因此,浏览器请求https://site-url.com/something
并立即应用第一个规则并将您重定向回http://www.site-url.com/something
,然后应用第二个规则,因为没有L
标志等。无限循环。
解决方案,在您的规则中添加L
和https
:
RewriteCond %{HTTP_HOST} ^site-url.com$
RewriteRule ^(.*)$ https://www.site-url.com/$1 [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]