2012-09-08 28 views
2

我有我試圖將它們轉換爲正規鑰匙=價值形態形式Apache的URL重寫,URL與參數不確定數量

http://www.site.com/someCompany/someEmployee/name/someName/age/someAge/.../keyN/someValueN/ 

的網址,但不能看着辦吧。

能否請你幫我把它轉換到

http://www.site.com/someCompany/someEmployee?name=someName&age=someAge&...&keyN=someValueN/ 

基本上,可以有任意數字鍵和值以及其在URL指定爲/鍵/值/

我讀了很多的例子和教程,但他們都沒有解釋處理具有可變數量參數的URL。

在此先感謝,

回答

0

請確保您已打開mod_rewrite。

在你的文檔根htaccess文件,添加這些(你可能有最好高於其他規則):

# Start converting query parameters to path 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/(.+?)\?[^\ ]+ 
RewriteCond %{QUERY_STRING} ^([^=]+)=([^&]+)&?(.*)$ 
RewriteRule ^([^/]+)/(.+)$ /$1/$2/%1/%2?%3 [L] 

# done converting, redirect browser 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+)/(.+?)\?[^\ ]+ 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^([^/]+)/(.+)$ /$1/$2 [R=301,L] 


# internally rewrite paths to query strings 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)(.*) /$1/$2$5?$3=$4 [L,QSA] 

# only someCompany/someEmployee left, pass it through 
RewriteRule ^([^/]+)/([^/]+)/?$ /$1/$2 [L,R] 

這將似乎有種複雜。但前兩條規則會檢查給定請求是否針對2個文件夾(例如/something/somethingelse)和查詢字符串(?之後的所有內容),然後匹配名稱/值對並將其構建到URI路徑中。當查詢字符串爲空時,將瀏覽器重定向到新的URL(不含查詢字符串)。這使得它,所以當有人去進入網址到瀏覽器:

http://www.site.com/someCompany/someEmployee?name=someName&age=someAge&keyN=someValueN 

瀏覽器被重定向,以便在地址欄中的URL看起來像:

http://www.site.com/someCompany/someEmployee/name/someName/age/someAge/keyN/someValueN/ 

然後第二組規則需要路徑層次結構,保留前2個文件夾(例如/fooCompany/barEmployee),並將每個2個文件夾更改爲查詢字符串中的名稱/值對。基本上顛倒前兩條規則的作用,但它不重定向瀏覽器。它只會在內部重寫URI。