mod_rewrite正则表达式中的转义句点(。)字符

时间:2012-06-23 18:32:57

标签: regex apache .htaccess mod-rewrite

我目前使用此规则设置.htaccess文件:

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

按预期工作: mysite.com/joe 变为 mysite.com/user.php?user=joe

如何更改正则表达式以在可能的用户名中包含句点?

例如我想 mysite.com/joe.bloggs 转到 mysite.com/user=joe.bloggs

目前,这会导致404缺少页面错误。

我试过^([a-zA-Z0-9\._-]+)$ user\.php?user=$1 [L] 但这会产生内部错误500(我认为这是由于无限循环:如果没有指定用户,user.php被设计为重定向到主页。)

我对这一切都很陌生(尤其是正则表达式)。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

.在字符类中没有特殊含义,因此无需转义它。

如果这没有帮助,请尝试将die("Test")放在user.php的开头。这将允许您查看错误是来自重写还是PHP文件。

答案 1 :(得分:1)

首先检查请求的URL是否不是文件或文件夹。这会阻止/user.php

等网址的重定向循环
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-.]+)$ user.php?user=$1 [L,QSA]