0

这是我的htaccess:

RewriteEngine On 
RewriteBase /

RewriteRule ^about$ about.php       
RewriteRule ^contact$ contact.php
RewriteRule ^user/([^/.]+)?$ user.php?uname=$1&%{QUERY_STRING}

我想要做的是当有人去 mysite.com/username 时它会这样做: user.php?uname=$1&%{QUERY_STRING} 这很简单:RewriteRule ^/([^/.]+)?$ user.php?uname=$1&%{QUERY_STRING}

但是如果用户名是页面名称怎么办?例如,如果用户名是 about 或 contact ?有没有办法添加例外?或者我该如何处理。

4

3 回答 3

1

您没有使用 L (最后一个标志),这可以解决您的问题。请改用此代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^about/?$ /about.php [L,NC] 
RewriteRule ^contact/?$ /contact.php [L,NC]
RewriteRule ^user/([^/]+)/?$ /user.php?uname=$1 [L,NC,QSA]
于 2013-03-25T11:06:16.487 回答
1

最简单的解决方案是创建用户名黑名单。不允许任何人创建与您网站上所需页面匹配的用户名。如果您将 [L] 标志放在当前规则上,它将停止进一步的规则处理,因此您可以在底部添加另一个规则来捕获用户名。

RewriteRule ^([^/.]+)?$ user.php?uname=$1&%{QUERY_STRING}

当然,即使您没有将系统应该工作的用户名列入黑名单。他们只需要使用 /user/about,因为 /about URI 已经被使用了。

于 2013-03-25T09:18:51.860 回答
0

例如,您可以使用重定向

Redirect /about http://mysite.com/about.php

希望这可以帮助。

于 2013-03-25T09:11:13.760 回答