0

我正在使用以下 mod 重写来确保不仅规范 URL,而且该站点使用 HTTPS 显示:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
// It think the problem must be here --^

RewriteCond %{HTTP_HOST} ^rto12\.ca$ [NC]
RewriteRule ^(.*)$ https://www.rto12.ca/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php?
RewriteRule ^index\.php?$ https://www.rto12.ca/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html?
RewriteRule ^index\.html?$ https://www.rto12.ca/ [R=301,L]

当您尝试去这里时,我的问题就来了:rto12.ca...浏览器将您带到这里:` https://www.rto12.ca/https://rto12.ca/ '

这是导致这种情况的第一个条件/规则。任何建议,将不胜感激。

4

1 回答 1

4

这条规则:

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

...只会将请求重写为https://rto12.ca/REQUEST_URI,然后将其传递给下一条规则(您附加到请求末尾的下一条规则的输入将是https://rto12.ca/REQUEST_URI)。但是,要使其正常工作,您需要立即重定向:

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

有可能将您的所有规则最多组合成一个重定向,所以让我尝试一下,我会看看我能想出什么,然后我会更新答案。不过,添加标志应该可以解决您的问题。

编辑:我认为这应该一口气完成所有事情:

RewriteEngine On

RewriteCond %{HTTPS}        =off   [OR]
RewriteCond %{HTTP_HOST}   !^www\. [OR]
RewriteCond %{THE_REQUEST}  ^[A-Z]{3,9}\ /index\.(html|php)
RewriteCond %{HTTP_HOST}    ^(www\.)?(.+)$
RewriteRule ^(index\.(html|php))|(.*)$ https://www.%2/$3 [R=301,L]
于 2010-09-07T15:14:43.943 回答