.htaccess重写为短url句柄异常
以下是我的访问权限:.htaccess重写为短url句柄异常,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,以下是我的访问权限: 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\u
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\u STRING}
这很简单:RewriteRule^/([^/]+)?$user.php?uname=$1&%{QUERY\u STRING}
但是如果用户名是一个页面名呢?
例如,如果用户名为about,或contact?有没有添加异常的方法?或者我该如何处理它。例如,您可以使用重定向
Redirect /about http://mysite.com/about.php
希望这有帮助。最简单的解决方案是创建用户名黑名单。不允许他人创建与您站点上所需页面匹配的用户名。如果在当前规则上添加[L]标志,它将停止进一步的规则处理,因此您可以在底部添加另一个规则来捕获用户名
RewriteRule ^([^/.]+)?$ user.php?uname=$1&%{QUERY_STRING}
当然,即使你没有将用户名列入黑名单,系统也应该可以工作。他们只需要使用/user/about,因为/about URI已经被使用了。您没有使用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]