如何通过修改.htaccess移除URL中的子目录并隐藏.html后缀
.htaccess 重写规则配置方案
完整配置代码
把以下规则直接替换你现有.htaccess的内容即可,如果你要移除的子目录名不是removethis,替换规则中对应位置的字符串即可:
RewriteEngine on # 1. 外部重定向:将带removethis子目录、带.html后缀的旧地址跳转到无后缀无目录的新地址 RewriteCond %{THE_REQUEST} /removethis/([^.]+)\.html [NC] RewriteRule ^ /%1 [L,R=302,NC] # 2. 全局.html后缀移除规则(你原有规则调整顺序后保留) RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC] RewriteRule ^ /%1 [NC,L,R=302] # 3. 内部重写:先匹配无后缀地址是否对应removethis目录下的html文件 RewriteCond %{DOCUMENT_ROOT}/removethis/$1.html -f RewriteRule ^([^/]+)$ /removethis/$1.html [NC,L] # 4. 原有全局html后缀内部映射规则(调整顺序后保留) RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^ %{REQUEST_URI}.html [NC,L]
规则逻辑说明
- 所有外部跳转规则放在最前面,优先处理用户访问的旧地址跳转,避免内部重写逻辑干扰跳转效果
- 首先处理需要移除指定子目录的请求,匹配成功后直接跳转到根目录下的无后缀地址
- 内部重写阶段优先匹配目标文件是否在要移除的子目录下,匹配成功直接内部加载对应文件,不会改变浏览器地址栏显示
- 原有全局去后缀规则保留,兼容根目录下其他不需要移除子目录的html文件
部署注意事项(适配Namecheap cPanel环境)
- 配置文件需要放在站点根目录(默认是
public_html文件夹)下的.htaccess文件,不要放在子目录内 - 初始测试用
R=302临时跳转,确认所有跳转符合预期后再改成R=301永久跳转,避免浏览器缓存错误规则 - 配置修改后需要清空浏览器缓存,或者用无痕模式测试,排除本地缓存干扰
内容的提问来源于stack exchange,提问作者Ari K
相关产品推荐
相关产品推荐

