2011-12-23 82 views
17

我試圖在stackoverflow看,但我找不到我的答案。.htaccess頁面和lang錯誤

所以我需要找出哪個域是哪個子域的用戶,哪個頁面正在加載。

如:en.domain.com/contactus

這應該加載英語與我們聯繫頁面。

我有什麼是:

RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$ [NC] 
RewriteRule ^(.*)$ index.php?lang=en&page=$1 [L,NC] 

RewriteCond %{HTTP_HOST} ^en.domain.com$ [NC] 
RewriteRule ^(.*)$ index.php?lang=en&page=$1 [L,NC] 
RewriteCond %{HTTP_HOST} ^fr.domain.com$ [NC] 
RewriteRule ^(.*)$ index.php?lang=fr&page=$1 [L,NC] 
#etc... 

,但由於某種原因,當我呼應獲取頁面,該值是:index.php文件,所以我不能閱讀網頁。

回答

18

下面是你應該使用什麼:

RewriteEngine On 
RewriteBase/

SetEnvIf Host ^www\. lang=en 
SetEnvIf Host ^en\. lang=en 
SetEnvIf Host ^fr\. lang=fr 

RewriteCond %{REQUEST_URI} !\.(css|png|gif|jpe?g|js)$ [NC] 
RewriteRule ^([a-z0-9_\-]+)/?$ index.php?lang=%{ENV:lang}&page=$1 [L,NC,QSA] 

%{ENV:lang}將從SetEnvIf讀取(從子域),並設置正確的語言,你會從$_GET['lang'];獲得(在你的PHP代碼 - 假設它是PHP)

這樣,任何子域都將被動態加載,而不會爲子域重複創建規則。我還添加了一個防止加載圖像或JavaScript作爲頁面的規則。

+0

非常感謝你,我改變了一些東西,但這項工作很完美。 – goblar 2011-12-23 19:44:33

+0

歡迎,很高興我能幫忙,謝謝 – 2011-12-23 19:46:07

+4

+1使用setenvif – Tech4Wilco 2011-12-24 14:12:00