.htaccess 禁用url重写中删除的起始斜杠
好吧,我有一个网站,我想从那里获得流量.htaccess 禁用url重写中删除的起始斜杠,.htaccess,mod-rewrite,apache2,.htaccess,Mod Rewrite,Apache2,好吧,我有一个网站,我想从那里获得流量 http -> https non www -> www 因此,最终的url应该如下所示:https://www.x.net 我在htaccess中设置了一些重写规则,如下所示: RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI}$1 [R=301,L] RewriteCond %{HTTPS} off Rewr
http -> https
non www -> www
因此,最终的url应该如下所示: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
它工作正常,所有内容都被重定向,但唯一的问题是以下类型的URL
x.com/help
发生的情况是它将重定向到
https://www.x.comhelp
它删除了com和help之间的斜杠,我在Google上找不到答案,所以我想,也许我的StackOverflow朋友可以帮我:)
RewriteCond%{HTTP\u 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\u URI}
服务器变量。(这包括斜杠前缀。)
当您确定其工作正常时,将
302(临时)重定向更改为301(永久)重定向。(301重定向由浏览器缓存,因此请确保在测试前清除缓存。)斜杠不会以某种方式神奇地删除。它不是在.htaccess
样式文件中使用的${REQUEST\u URI}
的一部分,因为这些文件只在相对路径上工作。如果您将这些规则放在http服务器主机配置中,则情况就不同了(尽管更好,但您需要访问)。如果您想坚持使用.htaccess
样式文件,则必须手动添加它:重写规则^(.*)$https://%{HTTP\u HOST}/%{REQUEST\u URI}$1
。虽然这实际上有点取决于您使用的文件的实际位置。您应该开始阅读文档。这在这里有解释。@arkascha%{REQUEST\u URI}
服务器变量确实包含斜杠前缀。它是与重写规则
模式匹配的URL路径,该模式不匹配(每个目录前缀被剥离)。“它工作正常”-您发布的指令不能产生所述的输出。如果请求x.com/help
,您当前的指令将导致:https://www.x.com/helphelp
。(不是https://www.x.comhelp
)。
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]