多言語サイトの振り分けでの.htaccessの書き方について


現在下記構成の多言語対応サイトを作っています。  
英語版：/en  
日本語版：/ja  
中国語版：/zh

[code]

    RewriteBase /
    RewriteCond %{HTTP:Accept-Language} ^ja [NC]
    RewriteRule ^$ /ja/ [L,R=301]
    RewriteCond %{HTTP:Accept-Language} ^zh [NC]
    RewriteRule ^$ /zh/ [L,R=301]
    RewriteRule ^$ /en/ [L,R=301]
    
[/code]

現在は上記を.htaccessに記載しており正常に動作していますが例えば「/book/」にアクセスした際に「/ja/book/」に飛ばしたいのですが「/ja/」に飛ばされてしまいます。

[code]

    RewriteBase /
    
    RewriteCond %{REQUEST_URI}  !(^/ja/)
    RewriteCond %{HTTP:Accept-Language} ^ja [NC]
    RewriteRule ^(.*)$ /ja/$1 [L,R=301]
    
    RewriteCond %{REQUEST_URI}  !(^/zh/)
    RewriteCond %{HTTP:Accept-Language} ^zh [NC]
    RewriteRule ^(.*)$ /zh/$1 [L,R=301]
    
    RewriteCond %{REQUEST_URI}  !(^/en/)
    RewriteRule ^(.*)$ /en/$1 [L,R=301]
    
[/code]

上記のように書くと「/ja/」と「/en/」で無限ループになってしまいます。  
無限ループにならないような書き方はどのようにすればよいでしょうか。




>
[code]

>     RewriteCond %{REQUEST_URI}  !(^/en/)
>  
[/code]

という条件ですと `/ja/～` や `/zh/～`
もマッチしてしまうからでしょう。リダイレクト済みの３言語については先にマッチを終了させておくのはどうでしょうか。

[code]

    RewriteBase /
    
    RewriteCond %{REQUEST_URI} ^/(ja|zh|en)/
    RewriteRule .* - [L]
    
    RewriteCond %{HTTP:Accept-Language} ^ja [NC]
    RewriteRule ^(.*)$ /ja/$1 [L,R=301]
    
    RewriteCond %{HTTP:Accept-Language} ^zh [NC]
    RewriteRule ^(.*)$ /zh/$1 [L,R=301]
    
    RewriteRule ^(.*)$ /en/$1 [L,R=301]
    
[/code]

