.htaccess中RewriteCond排除指定路径失效问题求助
解决.htaccess重定向排除规则失效问题
你的规则失效是因为第三个条件的正则表达式仅匹配/tutorial/后带内容的路径,未覆盖/tutorial本身,且正则写法可进一步优化。以下是修正后的完整规则:
RewriteEngine On # 重定向所有非根路径到主页,排除/tutorial开头的路径和静态资源 RewriteCond %{HTTP_HOST} ^(?:www\.)?test\.com$ [NC] RewriteCond %{REQUEST_URI} !^/$ [NC] RewriteCond %{REQUEST_URI} !^/tutorial(/.*)?$ [NC] RewriteCond %{REQUEST_URI} !\.(pdf|js|ico|gif|jpg|png|svg|css|rar|zip|tar\.gz|map)$ [NC] RewriteRule ^ https://www.test.com [R=302,L]
关键修正说明:
- 将第三个条件的
!^/tutorial/(.*)$调整为!^/tutorial(/.*)?$,既能匹配/tutorial/xx这类子路径,也能匹配/tutorial本身,确保所有以/tutorial开头的路径都被排除重定向。 - 把
RewriteRule .?改为RewriteRule ^,写法更规范,可匹配所有非空路径。 - 测试阶段用
R=302临时重定向,避免浏览器缓存旧规则导致测试结果不准,确认规则生效后再改为R=301永久重定向。
验证效果:
- 访问
https://www.test.com/testing→ 重定向至主页 - 访问
https://www.test.com/tutorial或https://www.test.com/tutorial/xx→ 保持原路径不变 - 访问静态资源(如
https://www.test.com/image.jpg) → 保持原路径不变
内容的提问来源于stack exchange,提问作者balicekt
相关产品推荐
相关产品推荐

