在使用规则之前检测.htaccess中是否存在目录

时间:2017-06-18 15:13:26

标签: .htaccess mod-rewrite

我使用此.htaccess规则检测网址中的用户名,并将访问者重定向到用户个人资料页面:

# username handler
RewriteRule ^([a-z]{2,30})$ /user.php?username=$1 [L]

那样:

example.com/asantos打开user.php?username=asantos

我也有一级目录:

  • example.com/ajax/
  • example.com/static/
  • example.com/assets/

因此,如果我直接打开任何这些目录,它们会被htaccess规则检测到,因此被重定向到:

  • example.com/user.php?username=ajax
  • example.com/user.php?username=static
  • example.com/user.php?username=assets

当且仅当目录已存在时,如何忽略该.htaccess规则?

1 个答案:

答案 0 :(得分:1)

你可以这样做:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]{2,30})$ /user.php?username=$1 [L]

或者,为了获得更好的性能,请列出目录以避免轮询文件系统:

RewriteCond %{REQUEST_URI} !/(?:ajax|static|assets)$
RewriteRule ^([a-z]{2,30})$ /user.php?username=$1 [L]