0

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

并得到同样的问题。

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

谢谢

杰森

4

2 回答 2

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

解决方案,将Land添加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] 
于 2013-07-23T21:10:39.500 回答
0

你可以试试:

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} != on [NC]
RewriteRule ^(.*)$ https://www.site-url.com$1 [L,R=301]
于 2013-07-23T21:01:35.210 回答