好吧,所以我有一个网站,我希望来自
的流量http -> https
non www -> www
所以最后的网址应如下所示:https://www.x.net
我在htaccess中设置了一些重写规则,如下所示:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}$1
它工作正常,一切都被重定向,但唯一的问题是以下类型的网址。
x.com/help
会发生什么情况会重定向到
https://www.x.comhelp
它删除了com和帮助之间的斜线,我无法在Google上找到答案,这就是为什么我,也许我的StackOverflow朋友可以帮助我:)
答案 0 :(得分:0)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L]
您不应同时使用%{REQUEST_URI}
服务器变量和$1
反向引用。使用其中一个,见下文......
您需要将指令更改为以下内容。这使用了RewriteRule
模式的反向引用,特别是排除了斜杠,因此必须包含在替换中:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R=302,L]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=302,L]
或者,改为使用%{REQUEST_URI}
服务器变量。 (这包括斜杠前缀。)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]
如果您确定它正常工作,请将302
(临时)重定向更改为301
(永久)重定向。 (301重定向由浏览器缓存,因此请确保在测试之前清除缓存。)