简单.htaccess无法工作 - 卡在无限循环中 - 这可能是服务器配置问题吗?

时间:2013-07-23 20:13:58

标签: .htaccess

我在一个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$

并得到同样的问题。

有没有人有建议或者这可能是服务器的配置问题?如果是这样,任何人都可以指出它可能是什么?

由于

杰森

2 个答案:

答案 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标志等。无限循环。

解决方案,在您的规则中添加Lhttps

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]