2009-08-27 80 views
1

我最近發現了mod_rewrite模塊的強大功能,我需要一些幫助。mod_rewrite:根據HTTP_HOST設置GET

說我有一個網站,該網站有兩個域名映射到同一主機...

example.com 
example.net 

而且我想設置取決於該HTTP_HOST一個GET VAR(即.com或.net ?)...

/index.php?lang=en 
/index.php?lang=es 

然而,需要注意的是這個..我已經有了3周的RewriteRules ...

RewriteRule ^(about|contact)/?$ /index.php?page=$1 [NC] 
... 
.. 

如果我我們將通過here(RewriteCond的底部)來仿效這個例子,我將不得不爲每個HTTP_HOST複製3個RewriteRules。 .com或.net)並添加GET變量靜態像; & LANG = EN或& lang = es編輯和每個規則的結尾......

有,而無需通過在剛一個送無功一遍,只有不同的複製3分的規則自動一些方法來做到這一點結束?

PS。我知道這可以通過腳本語言完成,但我想知道這是否可以通過mod_rewrite完成,以及如何。

thanx!

回答

2

嘗試把這樣的事情你的所有其他規則之前:

RewriteCond %{HTTP_HOST} .com$ 
RewriteRule ^(.*)$ $1?lang=en [QSA] 
RewriteCond %{HTTP_HOST} .net$ 
RewriteRule ^(.*)$ $1?lang=es [QSA] 

雖然你可能使用環境變量指定的語言,使用SetEnv指令,在每個虛擬主機不同的語言會更好。

或者甚至可能更好,看看mod_negotiation,其中包含一些處理語言的標準功能。

+0

我會檢查出QSA旗..看起來很有希望。 – 2009-08-27 18:09:27

+0

雖然代碼的幫助很大,但它本身沒用。因爲apache會繼續將每個頁面重定向到?lang = en | es,即使已經設置了它,你也將被無限遞歸。 因此,在之前添加以下行:RewriteCond%{QUERY_STRING}!(lang =(zh-cn)) 如果已經設置,它將不會重定向到?lang = en | es) – 2009-08-27 18:45:52

+0

除非您稍後重新啓動規則重寫過程,否則不應該有任何無限遞歸。從你的問題,我相信你沒有這樣做。 – 2009-08-27 19:54:19