2011-08-22 78 views
1

我正在使用mod_rewrite使我的URL变得干净。通过这样做:

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/

但是如果在配置文件后还有其他$_GET变量会怎么样。因此,举例来说,如果用户要求: website.com/user/profile/?do=that&go=ahead

当我尝试打印$_GET['do']$_GET['go'],他们返回空。

任何想法?

建议,让我的mod_rewrite代码更短,也欢迎:)

回答

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]