我正在使用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=profile
至website.com/user/profile/
。
但是如果AFTER配置文件中还有其他$_GET
个变量,该怎么办?例如,如果用户要求:
website.com/user/profile/?do=that&go=ahead
当我尝试打印$_GET['do']
和$_GET['go']
时,它们会返回空白。
有什么想法吗?
欢迎使我的mod_rewrite代码更短的建议:)
答案 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]