2010-08-27 63 views
0

我知道一些衝突,但作爲一個國防部重寫麻瓜是時候尋求幫助。apache重寫衝突

我重新寫http://test.com/[name]/
http://test.com/script.php?id=[name]
成功,使用:

(rule#1) 
RewriteRule ^(.*)\/$ script.php?id=$1&%{QUERY_STRING} [L] 

接下來,我重寫http://test.com/[name]/foobar/[key]
http://test.com/script.php?id=[name]&foobar=[key]
也成功使用:

(rule#2) 
RewriteRule ^(.*)\/foobar/([0-9]+)$ script.php?id=$1&foobar=$2 [L] 

何wever,當我嘗試包括查詢字符串,
使http://test.com/[name]/foobar/[key]?p=[page]
可以重新寫入http://test.com/script.php?id=[name]&foobar=[key]&p=[page]
本:

(rule#3) 
RewriteRule ^(.*)\/foobar/([0-9]+)$ script.php?id=$1&foobar=$2&%{QUERY_STRING} [L] 

然後阿帕奇只是投我回到http://test.com/script.php。該規則#3

我知道,從試驗和錯誤會工作,如果它沒有使用相同的script.php的規則#1,
但我不知道如何解決它,所以任何幫助表示讚賞!

Arrgh ..在用Gumbo的例子仔細檢查我的規則後,我終於發現出了什麼問題。雖然不完美,但我的重寫規則實際上是按照預期工作的。然而,我完全忘記了我有另一個腳本來檢查有效的參數......顯然,拋出隨機測試值,有時不是一個好主意。感謝^ /伎倆!

回答

0

警告:您正在使用.*,它實際上什麼都不匹配。使用.+,除非它意圖不匹配任何東西。

是否已將所有規則列在此處?您的error_log中是否有任何錯誤?

2

使用[^/]+匹配除了/,而不是.*任意數量的任意字符只有一個或多個任意字符:

RewriteRule ^([^/]+)/$ script.php?id=$1&%{QUERY_STRING} [L] 
RewriteRule ^([^/]+)/foobar/([0-9]+)$ script.php?id=$1&foobar=$2 [L] 

此外,您可以設置QSA標誌有自動追加原請求的查詢到新的網址而不是手動添加:

RewriteRule ^([^/]+)/$ script.php?id=$1 [L,QSA]