htaccess URL重写URL中的用户名与其他重写URL冲突

时间:2011-12-19 17:11:36

标签: apache .htaccess

好的,我正在创建一个用户可以创建个人资料的网站。我希望用户配置文件与http://example.com/username类似,但问题是它与其他规则冲突。

RewriteEngine on
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule story/(.*)/ story.php?id=$1
RewriteRule story/(.*) story.php?id=$1

#Profiles:
RewriteRule (.*)/ profile.php?id=$1
RewriteRule (.*) profile.php?id=$1

现在,当我尝试访问http://example.com/story/hello_world时,系统会认为URL中的“故事”是UserName并在数据库中搜索它,然后抛出404页面(如预期的那样)。

我不想要像example.com/user/username这样的用户页面。

示例:Digg.com有digg.com/story和digg.com/username

1 个答案:

答案 0 :(得分:0)

您可以使用以下规则替换这两个规则,以防止将http://example.com/story/hello_world解释为用户的问题。

RewriteRule ^([^/])+/?$ profile.php?id=$1 [L]

如果您对用户名有更具体的规则,例如用户名是字母数字,长度在5到10个字符之间,那么更好的规则是

RewriteRule ^([a-zA-Z0-9]{5,10})/?$ profile.php?id=$1 [L]