2010-07-17 73 views
1

我想在我的网站上使用的个人资料网址的网页,如xyz.com/username漂亮的个人资料网址,而不会

冲突我使用的后续代码:

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?p=profile&u=$1 [L,QSA] 

RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?p=profile&u=$1 [L,QSA] 

我的问题是... 我该如何使用它,并保持访问其他链接,如xyz.com/forums,xyz.com/friends等。

谢谢。

+0

可能重复的[国防部重写和静态网页](http://stackoverflow.com/questions/3250769/mod-rewrite-and-static-pages) – 2010-07-17 21:27:11

回答

0

使用该/ adsfasdfasdf而不是/东西:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?p=profile&u=$1 [L,QSA] 

它检查请求的文件是否是一个目录或文件,如果没有将它传递给index.php

您也可以在/之后放置一个?以使其可选(组合您的两个规则)。

1

您可以尝试使用一个条件:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?p=profile&u=$1 [L,QSA] 

-f和-d是“是一个文件”和“是目录”分别标志。 !否定这一点。您的重写应该只发生在您的网站根目录中实际不存在的网址上。你可能会想添加一个初始条件来匹配你的用户名格式,所以你不会踩踏每个潜在的404错误。

你可以在前面加上以下,太:

RewriteCond %{REQUEST_URI} ^/[a-zA-Z0-9_-]+/?$ 

所以你只能匹配/是/不/存在

+0

+1,但可能更详细地解释一下--f和-d做? – 2010-07-17 21:16:02