非 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の目的には優れています。