如何从htaccess的Rewrite重写规则中排除test子文件夹的匹配?
问题原因
现有重写规则未排除已存在的子目录请求,test子目录的访问请求会被规则匹配尝试重写为对应.php文件,匹配失败就触发404报错。
调整后的完整.htaccess规则
RewriteEngine On # 排除test子文件夹的所有重写规则匹配 RewriteRule ^test(/.*)?$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/$ $1.php RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(.[a-zA-Z0-9]{1,5}|/)$ RewriteRule (.*)$ /$1/ [R=301,L]
规则说明
- 新增的
RewriteRule ^test(/.*)?$ - [L]会匹配所有test子目录下的请求,命中后直接停止后续所有重写规则的匹配,完全不干扰test目录的正常访问 - 原有规则全部保留,不影响原有的.php后缀隐藏功能,仍然可以通过
www.abcwebsite.com/file正常访问file.php - 修改后测试前请先清空浏览器301永久重定向缓存,避免之前的缓存跳转影响测试结果
- 如果后续需要排除其他子目录,可按相同格式新增规则即可,比如要排除admin目录就加一行
RewriteRule ^admin(/.*)?$ - [L]
内容的提问来源于stack exchange,提问作者Saurav Singhania
相关产品推荐
相关产品推荐

