如何配置.htaccess:排除folder及其子目录、文件实现全站重定向?
解决.htaccess排除文件夹及所有子内容的重定向问题
看起来你遇到的问题是想保留/folder及其所有子文件夹、文件不被重定向,但之前的规则没达到预期效果。其实你的初始思路方向是对的,但可以通过更简洁且精准的正则来避免冗余,同时确保所有子内容都被正确排除。
可行的规则方案
直接合并排除条件,用一个正则表达式覆盖/folder本身及其所有子路径:
RewriteEngine On # 排除 /folder 根目录及其所有子文件夹、文件 RewriteCond %{REQUEST_URI} !^/folder(/.*)?$ RewriteRule ^ https://www.newdomain.com/ [R=301,L]
规则解释
^/folder(/.*)?$这个正则的作用是:^/folder匹配以/folder开头的路径(/.*)?是可选的后缀部分:/加上任意字符(.*),?表示这部分可以不存在,所以既匹配/folder本身,也匹配/folder/subfolder、/folder/subfolder/file.jpg等所有子内容
- 加上
!前缀后,就表示不满足这个正则的路径才会执行后续的301重定向
为什么之前的规则没生效?
你之前添加单独的子文件夹排除条件其实是冗余的——初始规则里的!^/folder/.*已经能匹配所有/folder/开头的子路径(包括子文件夹)。可能导致问题的原因有两个:
- 浏览器缓存干扰:301重定向会被浏览器强缓存,测试时一定要清空缓存或者用隐私窗口打开
- 服务器MultiViews配置:如果服务器开启了MultiViews,可能会导致路径匹配异常,可以在规则顶部加上
Options -MultiViews来关闭:Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_URI} !^/folder(/.*)?$ RewriteRule ^ https://www.newdomain.com/ [R=301,L]
内容的提问来源于stack exchange,提问作者Merissa Kelley
相关产品推荐
相关产品推荐

