2010-08-27 54 views
1

即使是簡單的.htaccess讓我頭痛,我需要做下面的通用映射:通用htaccess的URL重寫

http://example.com/project/controllername/key1/val1/key2/val2/.../keyN/valN 

--> 

http://example.com/project/controllername.xyz?key1=val1&key2=val2...&keyN=valN 

例如:

http://example.com/so/pagecontroller/id/1/time/12345/title/helloworld 

--> 

http://example.com/so/pagecontroller.xyz?id=1&time=12345&title=helloworld 

任何指導將幫助!特別是處理特殊字符如'/','?'和'&'(更多?)的鍵和值。

編輯:爲了說明'project'和'controllername'路徑是動態的 - 它們不是靜態的。此外,鍵和值的數量不是預先確定的!我需要幫助創建htaccess文件代碼以及將該文件放置在Web樹中的哪個位置,並且如果每次修改htaccess文件時apache都需要重新啓動。謝謝!

回答

0

只要你不想選擇那些特殊字符,他們應該沒問題。你的例子的規則可能是:

RewriteRule http://example.com/so/pagecontroller/id/([0-9]+)/time/([0-9]+)/title/(.*)$ http://example.com/so/pagecontroller.xyz?id=$1&time=$2&title=$3 

我不認爲你可以在重寫規則中有一個動態數量的變量。但是你可以做的是:

RewriteRule http://example.com/so/pagecontroler/(.*) http://example.com/so/pagecontroler.xyz?vars=$1 

比你有一個名爲「瓦爾」和查詢作爲值的其餘部分GET參數。您可以分割不同的鍵和值服務器端,例如與PHP的explode() function

+0

謝謝,但我不能硬編碼的鑰匙或他們的立場。 – Yehonatan 2010-08-30 06:15:19

+0

是的,我想我可以提供所有的鍵和值作爲單個參數。 – Yehonatan 2010-08-31 09:57:25

0

嘗試下列規則:

RewriteRule ^([^/]+/[^/]+)/([^/]+)/([^/]+)(/.+)?$ $1$4?$2=$3 [QSA,N] 
RewriteCond $1 !.+\.xyz$ 
RewriteRule ^([^/]+/[^/]+)$ $1.xyz [L] 
+0

謝謝,我會盡快對此進行測試。這會處理動態數量的鍵和值嗎? – Yehonatan 2010-08-30 06:16:33