Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 禁用url重写中删除的起始斜杠_.htaccess_Mod Rewrite_Apache2 - Fatal编程技术网

.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]