0

私のウェブサイトで、イタリア語を話す訪問者 (言語ブラウザーはイタリア語) を /it/ にリダイレクトし、他のすべての言語を /en/ にリダイレクトしたいと考えています。

私は次のコードを思いつきます:

#redirect to /it for italian lang
RewriteCond %{HTTP_HOST} ^domain\.net$ [NC]
RewriteCond %{REQUEST_URI} !/it/ [NC] #doesn't have /it in the url already
RewriteCond %{REQUEST_URI} !/en/ [NC] #doesn't have /en in the url already
RewriteCond %{REQUEST_URI} !/admin/ [NC] #we are not in the admin panel
RewriteCond %{HTTP:Accept-Language} ^it [NC] #browser language is italian
RewriteRule ^(.*)$ http://domain.net/it/$1 [L,R=301]

#redirect to /en for all other langs
RewriteCond %{HTTP_HOST} ^domain\.net$ [NC]
RewriteCond %{REQUEST_URI} !/it/ [NC] #doesn't have /it in the url already
RewriteCond %{REQUEST_URI} !/en/ [NC] #doesn't have /en in the url already
RewriteCond %{REQUEST_URI} !/admin/ [NC] #we are not in the admin panel
RewriteRule ^(.*)$ http://domain.net/en/$1 [L,R=301]

このようにしてすべての条件がチェックされ、言語がイタリア語の場合は /it にリダイレクトされます。それ以外の場合は 2 番目のブロックが実行され、英語版にリダイレクトされます。

私の最初の質問は、これを行うためのより効率的な方法はありますか? 私のhtaccess機能は非常に限られています。

追加の質問として: これは SEO で問題を引き起こす可能性がありますか? domain.net をクロールするボットはすべて英語版にリダイレクトされ、イタリア語版へのリンク (旗の画像) を見つけて、イタリア語版もクロールすると思います。それが正しいか?

4

1 に答える 1

0

さまざまなパスを組み合わせることができます。ここで HTTP_HOST 条件を使用する理由はあまりないようです。サブドメインは別のディレクトリを指す必要があり、必要に応じてこれらのルールの前www.domaindomainリダイレクトする必要があります。さらに、URL に言語コードがないことがわかっているため%{REQUEST_URI}、ルールの書き換え部分で使用して、キャプチャ グループを廃止することができます。これにより、文字列を just ^(文字列には開始点があります) と一致させることができます。したがって、次のように単純化できます。

RewriteCond %{REQUEST_URI} !/(it|en|admin)/ [NC]
RewriteCond %{HTTP:Accept-Language} ^it [NC]
RewriteRule ^ http://domain.net/it%{REQUEST_URI} [R,L]

RewriteCond %{REQUEST_URI} !/(it|en|admin)/ [NC]
RewriteRule ^ http://domain.net/en%{REQUEST_URI} [R,L]

SEOに問題があるとは思いませんが、私はその分野の専門家ではありません。他の言語へのリンクがあり、そのリンクが でマークされていない限りrel="nofollow"、クローラーは他の言語のサイトも見つけるはずです。サイトは別の言語であるため、「重複コンテンツ」で罰せられることはありません。

于 2015-05-15T15:15:16.047 に答える