2016-04-28 22 views
1

我有一個基於php的網站,我正在使用一個lang URL變量來控制當前頁面的語言。但它看起來像這樣:.htaccess重定向語言請求/美化URL

http://www.example.com/page?lang=en # Yes, I am using .htaccess to remove the php extension from php pages. 

所以我想用的.htaccess這樣的重寫一遍:

http://www.example.com/en/page # Doesn't this look way better? 

請記住,我不是,不希望依靠Accept-Language,我想給用戶自由來改變自己,即使他們的PC是英文的語言,他們可能是當地人對我的網站的語言之一......

我嘗試以下方法:

RewriteCond %{HTTP:Accept-Language} ^en [NC] 
RewriteRule ^$ http://www.example.com/en/ [L,R=301] 

RewriteCond %{HTTP:Accept-Language} ^ru [NC] 
RewriteRule ^$ http://www.example.com/ru/ [L,R=301] 

RewriteCond %{HTTP:Accept-Language} ^de [NC] 
RewriteRule ^$ http://www.example.com/de/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 

RewriteRule ^(en|ru|de)/?$ index.php?lang=$1 [QSA,NC,L] 

但這顯然依賴於瀏覽器發送的內容爲Header,因此它不可行。這也打破了我的網站,如果我嘗試更改爲不Accept-Language內的語言 - 我的是英語,所以如果我嘗試訪問該網站,我得到這個的德語版本:

http://www.example.com/en/?lang=de 

這肯定是不是我想要的。

編輯:

其實這是我的發現:

RewriteEngine On 
RewriteRule ^([^/]*)/$ /?lang=$1 [L] 

我只是做了我所有的網頁...在的問題是,如果我嘗試做以下:

http://www.example.com/?lang=bg 

它仍將是這樣,並不會重定向,所以我不得不改變我的所有的鏈接,以及-.-如何重定向任何想法?我已經有了虛擬URL。

+0

這些規則甚至不會適應的'Q ='質量參數。第一種語言不一定是首選語言。 - 不管怎樣,不要按照RewriteRules來做。在PHP中探測ACCEPT_ *標頭,相應地設置一個首選項cookie,或者只有在未設置時才讓它們根據'lang ='param重寫。 (也請使用文字餅乾,這就是他們的目的,而不是會話。) – mario

回答

0
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^([^/]*)/$ /?lang=$1 [L] 

試試這個

+0

哦,現在我明白了。這像一個魅力。謝謝! –

+0

這就是你在你的編輯,並說它正在工作 –

+0

是的,我只是在我已經有的規則上面加上'RewriteCond's,它的工作原理! –