請確保您已打開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。