如何在.htaccess中检测子目录?解决重写规则与文件夹冲突问题
解决.htaccess重写规则误匹配实际目录的问题
这个问题在做URL美化时特别常见——核心就是要让你的重写规则只在请求的路径不是实际存在的文件或目录时才生效。你只需要在现有规则前添加两个条件判断就能搞定:
# 启用重写引擎(如果你的配置里还没加的话) RewriteEngine On # 排除实际存在的文件 RewriteCond %{REQUEST_FILENAME} !-f # 排除实际存在的目录 RewriteCond %{REQUEST_FILENAME} !-d # 原有重写规则,仅在上述两个条件都满足时执行 RewriteRule ^([0-9A-Za-z]+)$ profile.php?username=$1 [L]
各部分作用说明:
RewriteCond %{REQUEST_FILENAME} !-f:检查当前请求的路径不是真实存在的文件(!表示否定,-f代表匹配文件)。RewriteCond %{REQUEST_FILENAME} !-d:检查当前请求的路径不是真实存在的目录(-d代表匹配目录)。- 只有当这两个条件同时成立时,后面的
RewriteRule才会触发。这样当你访问myproject.com/images时,因为images是实际存在的目录,第二个条件不满足,规则就不会执行,服务器会正常返回该文件夹的内容。
如果你的场景里还需要排除实际存在的符号链接,可以额外加一条条件:
RewriteCond %{REQUEST_FILENAME} !-l
内容的提问来源于stack exchange,提问作者Yasir Mushtaq
相关产品推荐
相关产品推荐

