2010-01-05 83 views
1

我一直在努力得到以下重寫工作Apache的mod_rewrite的多參數

^/agatedepot/([0-9.]+)/([0-9a-zA-Z._]+)\?doc-id=([0-9a-zA-Z._\-]+) 

/agateDepot.php?date=$1&filename=$2&doc-id=$3 

我知道mod_rewrite的工作。我知道它正在讀取.htaccess文件,我只是沒有看到任何重定向發生。這是我的.htaccess文件中的內容

RewriteEngine On 
RewriteRule ^/agatedepot/([0-9.]+)/([0-9a-zA-Z._]+)\?doc-id=([0-9a-zA-Z._\-]+) /agateDepot.php?date=$1&filename=$2&doc-id=$3 

任何幫助將不勝感激。我想這是簡單的,但我一直無法弄清楚。在Apache的錯誤日誌和訪問日誌中沒有錯誤被簡單地記錄404

+1

這個問題更適合ServerFault。 – 2010-01-05 19:25:18

+0

你應該給出一個測試的具體URL的例子。 – 2010-01-05 19:31:19

+0

確保 /agatedepot/2010.01.03/a_bunch_of_text.txt?doc-id=xt.l.nfl.com.7182032 – GrumpyCanuck 2010-01-05 19:33:09

回答

3

網址查詢不是URL路徑的一部分,因此不能與RewriteRule進行處理。這裏您需要額外的RewriteCond directive。另外,當在.htaccess文件中使用mod_rewrite時,在測試規則之前移除了每個目錄的路徑前綴,並在應用規則後追加。所以在你的情況下,你需要從你的模式中刪除領先的/

RewriteCond %{QUERY_STRING} ^doc-id=([0-9a-zA-Z._\-]+)$ 
RewriteRule ^agatedepot/([0-9.]+)/([0-9a-zA-Z._]+)$ agateDepot.php?date=$1&filename=$2&doc-id=%1 
+0

完美。非常感謝! – GrumpyCanuck 2010-01-05 20:06:40

+0

如果您只是想將原始請求的查詢追加到新的查詢中,您還可以設置* QSA *標誌。 – Gumbo 2010-01-05 20:07:34

-1

嘗試添加RewriteBase /並跳過第一個斜槓(即^agatedepot...

0

問號?標誌着查詢字符串的開始,因此,它沒有被RewriteRule分析。您應該更換?或使用RewriteCond %{QUERY_STRING} ...進行分析。