多级目录下.htaccess去除URL文件扩展名失效问题求助
修复多级目录下的URL扩展名去除规则
嘿,我来帮你搞定这个问题!你当前的规则只覆盖了最多两级目录的场景,所以三级及以上的多级目录URL就失效了。咱们换个更通用的写法,能适配任意层级的路径,同时还能兼容带或不带末尾斜杠的访问方式。
修正后的完整.htaccess代码
RewriteEngine On # 强制跳转至HTTPS(保留你原有的规则) RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 如果请求的是真实存在的文件或目录,直接跳过后续规则,避免误处理 RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # 匹配任意层级的URL(支持带/不带末尾斜杠),自动添加.php扩展名 RewriteRule ^(.*?)/?$ $1.php [L]
关键调整说明
- 原规则的问题:你之前写的
^([^/]+)/$和^([^/]+)/([^/]+)/$分别只能匹配1级和2级目录的路径,无法覆盖folder/folder/filename这类多级场景。 - 通用匹配规则:
^(.*?)/?$中的.*?是非贪婪匹配,能捕获任意层级的路径(比如folder1/folder2/folder3/filename),/?允许URL末尾带或不带斜杠,适配不同的访问习惯。 - 排除真实文件/目录:新增的两个
RewriteCond会跳过对真实存在的文件和目录的处理,避免把example.com/image.jpg这类真实文件错误地重定向到image.jpg.php。
测试注意事项
因为301重定向会被浏览器缓存,测试新规则前建议清空浏览器缓存,或者使用隐私/无痕窗口访问,避免缓存的旧规则影响测试结果。
内容的提问来源于stack exchange,提问作者Brandon Belcher
相关产品推荐
相关产品推荐

