5

次のルールを使用して、ブラウザの言語に基づいてドメインをENバージョンのサイトにリダイレクトしています。

RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /en [L,R=302]

これはwww.domain.comで問題なく機能しますが、現在のwwwからwwwへのリダイレクトに失敗します。たとえば、http://domain.comhttp://www.domain.com/enにリダイレクトできません。これは、私が達成しようとしていることです。

ルールに何を追加する必要がありますか?ありがとうございました!

4

1 に答える 1

5

非 www を www にリダイレクトするには、次のように、質問のルール セットの前にこのルール セットを追加します。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]

#This is the rule set in the question:
RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /en [L,R=302]

問題を除いて実際のルールセットは正常に機能しているとのことなwwwので、私はそれを変更したりテストしたりしませんでした。

トップ ルール ルールが行うことは、すべての URL に www を挿入することです。それで全部です。質問のルールとは無関係ですが、その変換を EN 言語のみに制限したい場合は、次の行を移動します。

RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC]

次のように、最後のルールセットから最初のルールセットへ:

....
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteCond %{HTTP:Accept-Language} ^en.*$ [NC]
....

オプション

以前の言語ルールに一致しないすべてのリクエストをリダイレクトするには、すべての言語ルールの後に次の行を配置します。

RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /en [L,R=302]

デフォルトでは、すべての受信リクエストが英語セクションにリダイレクトされます。

したがって、.htaccess ファイルは次のようになります。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]

RewriteCond %{HTTP:Accept-Language} ^sv.*$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /sv [L,R=302]

RewriteCond %{HTTP:Accept-Language} ^nb.*$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /nb [L,R=302]

RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteCond %{QUERY_STRING} !(^q\=) [NC]
RewriteRule ^(.*)$ /en [L,R=302]

R=302すべてをに置き換えることをお勧めしますR=301。SEOの目的には優れています。

于 2013-01-12T22:22:11.063 に答える