我目前使用此规则设置.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被设计为重定向到主页。)
我对这一切都很陌生(尤其是正则表达式)。谢谢你的帮助!
答案 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]