使用包含点字符的模式匹配重写.htaccess规则不起作用

时间:2016-01-25 15:45:01

标签: regex .htaccess mod-rewrite

我使用htaccess创建了一个网站,并且通过在浏览器中显示错误而无法正常工作:

The page isn't redirecting properly

重写规则行是:

RewriteRule ^([a-zA-Z0-9-_\.]+)$      index.php?user=$1   [NC,L]

我使用它来获取get变量中的用户配置文件,如果点字符被删除,问题似乎就解决了:

RewriteRule ^([a-zA-Z0-9-_]+)$      index.php?user=$1   [NC,L]

但我需要用户名格式来包含点字符。

它应如何运作的示例:

http://www.example.dev/john.88     >>>  index.php?user=john.88
http://www.example.dev/johnsmith   >>>  index.php?user=johnsmith
http://www.example.dev/john_smith  >>>  index.php?user=john_smith

提前致谢。

1 个答案:

答案 0 :(得分:1)

使用DOT模式,它确实会导致无限循环,因为重写的URI /index.php也匹配您的模式。

要解决此问题,您需要RewriteCond

# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w.-]+)/?$ index.php?user=$1 [QSA,L]

另请注意,使用\w相当于[a-zA-Z0-9_]

,可以缩短正则表达式模式