5

我目前有一个使用此规则设置的 .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 旨在重定向到主页。)

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

4

2 回答 2

1

.在字符类中没有特殊含义,因此无需对其进行转义。

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

于 2012-06-23T18:37:40.413 回答
1

首先检查请求的 URL 是否不是文件或文件夹。这将防止 URL 的重定向循环,例如/user.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-.]+)$ user.php?user=$1 [L,QSA]
于 2012-06-23T18:48:58.377 回答