.htaccess重写为短url句柄异常

时间:2013-03-25 07:36:57

标签: .htaccess mod-rewrite url-rewriting

这是我的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}

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

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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]

答案 2 :(得分:0)

您可以使用重定向作为示例

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

希望这有帮助。