如何通过htaccess规则移除URL中的重复域名部分?
解决URL中重复域名的.htaccess规则
刚好碰到过类似的需求!你要的是精准移除URL路径里重复出现的域名部分,而不是误删整个域名对吧?针对你给出的例子,我们可以写一套通用的规则,不用硬编码域名,适配带www和不带www的情况。
具体规则代码
把下面的代码放到网站根目录的.htaccess文件里:
RewriteEngine On # 捕获当前请求的域名(适配带www和不带www的情况) RewriteCond %{HTTP_HOST} ^(www\.)?(.+)$ # 移除路径中//域名/的重复部分 RewriteRule ^//%2/(.*)$ /$1 [R=301,L] # 可选:如果还有可能出现单斜杠+域名的情况(比如/example.com/uploads/...),加上这条 RewriteRule ^/%2/(.*)$ /$1 [R=301,L]
规则解释
RewriteEngine On:开启URL重写功能,这是所有Rewrite规则的前提。RewriteCond %{HTTP_HOST} ^(www\.)?(.+)$:捕获当前访问的域名,把不带www的核心域名存在%2变量里(比如访问www.example.com时%2是example.com,访问example.com时%2也是example.com)。- 第一条
RewriteRule:专门匹配你例子里的//example.com/这种重复模式,把后面的文件路径$1保留,重写到正常的/$1路径,直接去掉前面重复的域名部分。 - 第二条可选规则:如果你的网站还存在
/example.com/uploads/这种单斜杠加域名的重复情况,加上这条就能一并处理。
注意事项
- 测试阶段可以把
R=301改成R=302(临时重定向),确认规则生效后再改回R=301(永久重定向,对SEO更友好)。 - 确保你的服务器已经开启了
mod_rewrite模块(Apache服务器默认一般是开启的,如果没开需要联系主机商开启)。 - 规则要放在
.htaccess的最前面,避免被其他规则干扰。
内容的提问来源于stack exchange,提问作者Yuri
相关产品推荐
相关产品推荐

