Apache重定向配置出现额外斜杠问题求助
Apache重定向配置出现额外斜杠问题求助
我最近在配置Apache的HTTP转HTTPS重定向时遇到了一个小问题,想请大家帮忙看看怎么解决。
我的配置代码如下:
<VirtualHost *:5555> RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{SERVER_PORT} =5555 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </VirtualHost>
原本期望把5555端口的HTTP请求都重定向到对应的HTTPS地址,但实际用浏览器访问时,重定向后的URL里会多出一个斜杠,变成类似https://example.com//test这样的格式——也就是%{HTTP_HOST}和%{REQUEST_URI}之间多了一个斜杠,请问该怎么去掉这个多余的斜杠呢?
问题分析与解决办法
其实这个问题的根源在于%{REQUEST_URI}变量本身就以斜杠/开头,而你原本的RewriteRule用(.*)匹配了整个请求路径,再拼接%{REQUEST_URI}就容易出现重复斜杠的情况。
你可以把RewriteRule改成下面两种写法中的任意一种,就能解决双斜杠问题:
写法一:使用捕获组精准拼接路径
RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
这种写法通过捕获组提取请求路径中除开头斜杠外的部分,再手动拼接一个斜杠,既能保证路径结构正确,又能彻底避免重复斜杠的问题。
写法二:简化匹配规则
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
把原来的(.*)换成^(匹配请求的起始位置),这样就不会重复匹配路径内容,直接拼接%{HTTP_HOST}和%{REQUEST_URI}就能得到正确的URL。
另外提醒一下:测试阶段建议先用R=302临时重定向,确认配置没问题后再改成R=301永久重定向,避免浏览器缓存错误的重定向规则导致后续测试出错。
备注:内容来源于stack exchange,提问作者sroth79
相关产品推荐
相关产品推荐

