。htaccessファイルをセットアップして複数の言語を検出し、それらを特定のSEOフレンドリーなURLにリダイレクトするにはどうすればよいですか?
基本的に、すべてのURLはindex.php?lang=(...)
に移動する必要があります。
したがって、英語言語検出http://mysite.com
はhttp://mysite.com/en/
(index.php?lang=en
)に移動する必要があります。
私の。htaccess現在(動作していない):
RewriteEngine On
RewriteCond %{HTTP:Host} http://mysite.com/
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ http://mysite.com/en/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ http://mysite.com/de/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^nl [NC]
RewriteRule ^$ http://mysite.com/nl/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^fr [NC]
RewriteRule ^$ http://mysite.com/fr/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^es [NC]
RewriteRule ^$ http://mysite.com/es/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(en|de|nl|fr|es)$ index.php?lang=$1 [L,QSA]
あなたはほとんどそこにいます。最初のRewriteCond
をドロップし(必須ではなく、これまでに一致しないため)、最後のRewriteRule
にリダイレクトするため、末尾の/
を追加します。
RewriteEngine On
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ http://mysite.com/en/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ http://mysite.com/de/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^nl [NC]
RewriteRule ^$ http://mysite.com/nl/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^fr [NC]
RewriteRule ^$ http://mysite.com/fr/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^es [NC]
RewriteRule ^$ http://mysite.com/es/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(en|de|nl|fr|es)/?$ index.php?lang=$1 [QSA,NC,L]
言語と国のパラメーターのコードを次に示します。これはすべての言語をサポートします:
#www.country.com/index.html becomes www.country.com/index.php
#www.country.com/fr/index.html becomes www.country.com/index.php?language=fr
#www.country.com/ca/fr/index.html becomes www.country.com/index.php?country=ca&language=fr
RewriteRule ^([a-zA-Z]{2})/([a-zA-Z]{2,3})/index\.html$ index.html?country=$1&language=$2
RewriteRule ^([a-zA-Z]{2,3})/index\.html$ index.html?language=$1
RewriteRule ^index\.html$ /index.php [L]