.htaccess RewriteRule 与目录不匹配
.htaccess RewriteRule that doesn't match directories
我有这个 .htaccess 规则:
RewriteRule ^([a-z]{2,3}|[a-z]{2}-[a-z]{3})/?$ /dashboard.php?lang= [QSA,L]
$1 值可以是具有以下结构的任何值:
- xx / 例如:es, en , it ,fr, ja, mww
- xx-xxx / 例如:zh-cht(中文)
因此,如果用户转到:
- mydomain.com/de >> 真的打开mydomain.com/dashboard.php?lang=de
工作正常...但我在 webroot 目录中也有一些目录可以(并且将会)混淆网络服务器。例如:
- mydomain.com/pap >> 这是一个包含一些页面的目录,网络服务器没有将其识别为目录,而是尝试像 mydomain.com/dashboard.[=51= 一样处理它]?lang=pap
- mydomain.com/img >> 你明白了...
- mydomain.com/css >> 你明白了...
问题是:.htaccess 如何避免我当前规则中已经存在的目录?
尝试添加条件:
RewriteCond %{REQUEST_FILENAME} !-d
就在规则之上。此条件检查 -d
(是现有目录)是否为假。因此,对目录的请求将无法满足该条件,并且不会执行该规则。
我有这个 .htaccess 规则:
RewriteRule ^([a-z]{2,3}|[a-z]{2}-[a-z]{3})/?$ /dashboard.php?lang= [QSA,L]
$1 值可以是具有以下结构的任何值:
- xx / 例如:es, en , it ,fr, ja, mww
- xx-xxx / 例如:zh-cht(中文)
因此,如果用户转到:
- mydomain.com/de >> 真的打开mydomain.com/dashboard.php?lang=de
工作正常...但我在 webroot 目录中也有一些目录可以(并且将会)混淆网络服务器。例如:
- mydomain.com/pap >> 这是一个包含一些页面的目录,网络服务器没有将其识别为目录,而是尝试像 mydomain.com/dashboard.[=51= 一样处理它]?lang=pap
- mydomain.com/img >> 你明白了...
- mydomain.com/css >> 你明白了...
问题是:.htaccess 如何避免我当前规则中已经存在的目录?
尝试添加条件:
RewriteCond %{REQUEST_FILENAME} !-d
就在规则之上。此条件检查 -d
(是现有目录)是否为假。因此,对目录的请求将无法满足该条件,并且不会执行该规则。