mod_rewrite与其他$ _GET变量冲突

时间:2011-08-22 16:28:11

标签: mod-rewrite

我正在使用mod_rewrite来清理我的网址。通过这样做:

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?page=$1&sub=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?page=$1&sub=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([0-9]+)$ index.php?page=$1&sub=$2&id=$3
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([0-9]+)/$ index.php?page=$1&sub=$2&id=$3
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?page=$1&sub=$2&action=$3
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?page=$1&sub=$2&action=$3

这可以很好地改变一切,例如: website.com/index.php?page=user&sub=profilewebsite.com/user/profile/

但是如果AFTER配置文件中还有其他$_GET个变量,该怎么办?例如,如果用户要求: website.com/user/profile/?do=that&go=ahead

当我尝试打印$_GET['do']$_GET['go']时,它们会返回空白。

有什么想法吗?

欢迎使我的mod_rewrite代码更短的建议:)

1 个答案:

答案 0 :(得分:2)

在这种情况下,您需要添加QSA flag。此外,我会说你的所有6条规则基本上都是这样做的。您可以使用?运算符向正则表达式添加可选节。例如,这些行:

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?page=$1&sub=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?page=$1&sub=$2

...可以合并为:

RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?page=$1&sub=$2 [QSA]