0

Wordpress の WPML プラグインを使用して言語を処理する 3 つの言語の調査コミュニティがあります。残念ながら、言語検出は php 経由でのみ機能します。htaccess の方が高速で、ユーザーが遅延に気付かないため、htaccess を使用したいと考えています。

セットアップは次のとおりです。

community.netigate.net/ (English, International)

community.netigate.net/de/ (German)

community.netigate.net/sv/ (Swedish)

私はさまざまなアプローチを試しましたが、最良のアプローチが次のアプローチであることがわかりました

http://tech-blog.borychowski.com/index.php/2009/03/htaccess/redirect-according-to-browser-language-mod-rewrite-and-http_accept_language/

ほとんどのユーザーはドイツ人またはスウェーデン人なので、"英語" のみを標準の代替言語にしたいと考えています。セットアップは次のようになります。

CHECK IF 言語がスウェーデン語の場合、スウェーデン語のサブページにリダイレクトし
ます CHECK IF 言語がドイツ語の場合、ドイツ語のサブページにリダイレクトし
ます ELSE フォールバックとして英語を使用します

残念ながら、以下の解決策は無限のリダイレクトになってしまいますか? 私は何か見落としてますか?

## Language Detection

#The 'Accept-Language' header starts with 'sv'
#and the test is case-insensitive ([NC])

RewriteCond %{HTTP:Accept-Language} ^sv [NC]

#Redirect user to /sv/hauptseite address
#sending 301 (Moved Permanently) HTTP status code

RewriteRule ^$ /sv/ [L,R=301]

#The 'Accept-Language' header starts with 'de'
#and the test is case-insensitive ([NC])

RewriteCond %{HTTP:Accept-Language} ^de [NC]

#Redirect user to /de/hauptseite address
#sending 301 (Moved Permanently) HTTP status code

RewriteRule ^$ /de/ [L,R=301]

#For every other language (including English :)) use English

RewriteRule ^$ / [L,R=301]
4

2 に答える 2

0

リダイレクトがすでに行われているかどうかを確認する別の書き換え条件を追加します

## Language Detection

#The 'Accept-Language' header starts with 'sv'
#and the test is case-insensitive ([NC])

RewriteCond %{HTTP:Accept-Language} ^sv [NC]

#If not already redirected
RewriteCond %{REQUEST_URI} !^/sv/ [NC]    # ADDED

#Redirect user to /sv/hauptseite address
#sending 301 (Moved Permanently) HTTP status code

RewriteRule ^$ /sv/ [L,R=301]

#The 'Accept-Language' header starts with 'de'
#and the test is case-insensitive ([NC])

RewriteCond %{HTTP:Accept-Language} ^de [NC]

#If not already redirected
RewriteCond %{REQUEST_URI} !^/de/ [NC]    # ADDED

#Redirect user to /de/hauptseite address
#sending 301 (Moved Permanently) HTTP status code

RewriteRule ^$ /de/ [L,R=301]

#For every other language (including English :)) use English

RewriteRule ^$ - [L]    # MODIFIED
于 2013-08-15T08:08:08.220 に答える
0

この行は次のとおりです。

#For every other language (including English :)) use English
RewriteRule ^$ / [L,R=301]

にリダイレクト/しているため/、リダイレクト ループが発生しています。この行はまったく必要ありません。

于 2013-08-15T08:09:35.380 に答える