2014-05-02 125 views
0

URL重寫我試圖讓像下面轉換路徑查詢字符串

http://domain/d1/d2/k1/val1/k2/val2/k3/val3 

的URL要

http://domain/index.php?one=d1&two=d2&k1=val1&k2=val2&k3=val3 

上面一個,兩個是固定按鍵,路徑的其餘部分是鍵值對。 當我在/ d1/d2 /之後附加了更多鍵值對(超過三個)時,如何寫出URL重寫規則?

更新#1:

以下是我到目前爲止。我無法在前兩個文件夾末尾追加動態鍵值對。

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_URI} !\.(css|png|jpe?g|gif)$ [NC] 
RewriteCond %{REQUEST_URI} !index\.php [NC] 
RewriteRule ^([^/]+)/([^/]+) /index.php?one=$1&two=$2 [QSA,L] 

我想補充一個文件夾「查詢」(見下文),以幫助爲鍵值對的模式匹配,因爲你知道後,查詢所有的文件夾都有關鍵值對。但是,我不能走得更遠。

http://domain/d1/d2/query/k1/val1/k2/val2/k3/val3 
+0

您到目前爲止得到了什麼? –

+0

請參閱我的更新。 –

回答

0

訣竅是遍歷重寫規則,直到目錄中的所有元素都被替換。首先改變所有的鍵/值對,則D1和D2:

# Convert key/value pairs at end of line. Loop (N) until path is just two levels deep 
RewriteCond %{REQUEST_URI} ^/(\w+)/(\w+) 
RewriteRule (.+)/(\w+)/(\w+)$ $1?$2=$3 [QSA,N] 

# Replace two final paths to query string and append to /index.php 
RewriteCond %{REQUEST_URI} !^/index.php 
RewriteRule /(\w+)/(\w+) /index.php?one=$1&two=$2 [QSA] 
+0

我想我的問題是如何通過鍵值對循環到最後。 –

+0

如何處理k1 = val1&k2 = val2 –

+0

@PaulStewart,這是一個代碼完整的例子。這演示了循環功能。評論告訴你,循環工作結束 - >開始。如果需要檢查它是否正常工作,請啓用rewriteLog。請記住,重寫對最終用戶是無聲的。 –