2017-03-17 141 views
3

我正在建造一個多語言網站,它將使用英語,德語和法語。英文網站將是,其他的將是他們子目錄使用.htaccess更改語言

  • 英語:example.com
  • 德國:example.com/
  • 法文:example.com/ fr

我很難找到乾淨的解決方案使用查詢字符串從語言重定向到語言。 (?LANG = ENLANG = DELANG = FR?)

此代碼工作,但我覺得它長:

# Languages 
<IfModule mod_rewrite.c> 
RewriteEngine on 

# Deutsch (Change FR to DE, or add DE if English) 
RewriteCond %{QUERY_STRING} lang=de 
RewriteRule ^fr/(.*) de/$1? [L,R=301] 
RewriteCond %{QUERY_STRING} lang=de 
RewriteRule ^(.*) de/$1? [L,R=301] 

# English (Remove DE if German, Remove FR if French) 
RewriteCond %{QUERY_STRING} lang=en 
RewriteRule ^de/(.*) /$1? [L,R=301] 
RewriteCond %{QUERY_STRING} lang=en 
RewriteRule ^fr/(.*) /$1? [L,R=301] 

# French (Change DE to FR, or add FR if English) 
RewriteCond %{QUERY_STRING} lang=fr 
RewriteRule ^de/(.*) fr/$1? [L,R=301] 
RewriteCond %{QUERY_STRING} lang=sq 
RewriteRule ^(.*) fr/$1? [L,R=301] 
</IfModule> 

是否有任何更好的溶出,所以在我們添加更多語言的情況下,會有更短,更乾淨的代碼

它是我第一次使用htaccess!

謝謝!

+0

試圖用PHP做什麼,而不是它可能是值得的?只需檢查lang GET並相應地更改標題即可。 – Deckerz

+0

它是一個WordPress多站點,每個站點都有它的語言,所以它很難改變每個header.I想用htaccess它會更容易,雖然我不知道如何改變語言(如果沒有插件是通緝令) – raktaktak

回答

0

爲什麼不通過dir鏈接到所需的語言並且沒有查詢字符串? 所以,如果你的用戶想要改變語言,你可以提供一個鏈接,讓我們從example.org/de/some-pageexample.org/fr/some-page,而不是使用example.org/de/some-page?lang=fr,然後將他重定向到example.org/fr/some-page ..這對我來說沒有意義。

如果您希望用戶使用特定語言查看頁面,則可以通過php或其他服務器端語言重定向他。

你只需要像這樣的htaccess來阻止用戶觀看任何網站,而所選擇的語言:

RewriteEngine on 

# add EN if there was no language selected 
RewriteCond %{REQUEST_URI} !^fr|de|en 
RewriteRule ^(.*) en/$1? [L,R=301]