禁用在url重写中删除的开始斜杠

时间:2015-09-26 16:08:53

标签: .htaccess mod-rewrite apache2

好吧,所以我有一个网站,我希望来自

的流量
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朋友可以帮助我:)

1 个答案:

答案 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重定向由浏览器缓存,因此请确保在测试之前清除缓存。)