2011-05-06 70 views
1

我需要一些網址使用mod_rewrite重寫我的網站,但我想不通的正則表達式。與mod_rewrite的學習語言重寫URL

這是當前的URL可能看起來是這樣的:
http://mydomain.com/zenphoto/pages/xyz?locale=en_US
http://mydomain.com/zenphoto/pages/xyz?locale=de_DE

http://mydomain.com/zenphoto/gallery_1?locale=de_DE
http://mydomain.com/zenphoto/gallery_n?locale=de_DE

xyz可能包含不同的字符串,例如legalabout

這就是我想使用的網址:
http://mydomain.com/zenphoto/de/pages/xyz
http://mydomain.com/zenphoto/en/pages/xyz

http://mydomain.com/zenphoto/de/gallery_1
http://mydomain.com/zenphoto/en/gallery_n

我應該指出,只有deen應成爲可能。其他任何字符串應重新路由到de

有人可以幫我嗎? :-)

感謝,
羅伯特

回答

3
RewriteEngine on 
RewriteRule ^zenphoto/pages/([a-z]+)\?locale=(en|de)_[A-Z]{2}$ /zenphoto/$2/pages/$1 
RewriteRule ^zenphoto/gallery_([0-9])\?locale=(en|de)_[A-Z]{2}$ /zenphoto/$2/gallery_$1 

第一個例子,我說:「如果URL開始(^)與 「zenPHOTO提供/頁/」,然後有小寫的序列字母(+表示 「一個或多個」 和[AZ]單元 「[A,b,...,Y,Z]一個字母」),這是我的第一組(有括號 - >這是一組),那麼它的後面,然後通過「en」或(。「區域設置=?」 |手段「或」)「德」,這是我的第二個組,那麼它的後面是下劃線(「_」)和兩個大寫字母,並沒有什麼後($意味着它是URL的結束)」。 我寫了一個空間,而新的URL我想,我用$ N使用ñ個組。 第二個URL是'漂亮的',第一個是真實的。

你面前特殊字符喜歡用反斜槓,+,{},(,),[,],*,?。|如果你想在你的網址中使用一個。

編輯:

如果你想避免無限循環,你應該添加標誌[L]在每行的末尾(L =最後)。

+0

這是迄今爲止我得到的最好和最易理解的答案之一。沒有開放的問題,寫得很清楚,完美。謝謝! :-) – 2011-05-06 19:57:16