2011-08-22 77 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]