2017-09-19 8 views
0

私は、次のしているnginxの設定ファイルdefault.confNginxで多言語設定を行うにはどうしたらいいですか?

map $http_accept_language $browser_lang { 
     default en; 
     ~ru ru; 
} 
map $cookie_lang $lang { 
    default $browser_lang; 
    ~en en; 
    ~ru ru; 
} 

server { 
    listen  80; 
    server_name localhost; 

    #charset koi8-r; 
    #access_log /var/log/nginx/log/host.access.log main; 

    location/{ 
     root /usr/share/nginx/html; 
     index index.html index.htm; 

     try_files $uri $uri/ /index.html; 
    } 

    #error_page 404    /404.html; 

    # redirect server error pages to the static page /50x.html 
    # 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 
} 

どのように私は、次のことが可能です。

1)は、言語に依存/en/*または/ru/*にすべて/*要求を渡しますか?

2)/en/*/usr/share/nginx/html/<request>?lang=enに、/ru/*/usr/share/nginx/html/<request>?lang=ruにそれぞれ渡しますか?

3)言語がenおよびruでない場合、/*へのパス/en/*へのすべてのパス?

答えて

0

あなたはルートURLのためなどのようなあなたの言語セクションのための2つの別々のlocationのブロックに適用する必要があります質問あなたに

location =/{ 
    rewrite^$scheme://$host/$lang$uri$is_args$args break; 
} 

location ~ '^/(?<lang_code>[\w-]{2})' { 
    rewrite ^/(?<lang_code>[\w-]{2})/(.*)$ /$1?lang=$lang_code last; 

    ... 
    root /usr/share/nginx/html; 
    index index.html index.htm; 
    try_files $uri $uri/ /index.html; 
    ... 
} 

まずlocationブロック答えを1)と3)ルートURLがでリライトされる場所その中の$lang変数はmapセクションから来ており、最後はenという言語をデフォルトとして使用することを定義しています。

2番目のlocationブロックは2つの文字パスとして言語パラメータを受け入れ、必要に応じてURLを書き換えます。

このコードは100%動作しているわけではありませんが、考えてください。

UPDATE

まあ、実際には1回のパスでこれを行うことができます:

location/{ 
    if ($uri !~ '^/([a-z]{2})(/.*)?$') { 
     rewrite^$scheme://$host/$lang$uri permanent; 
     rewrite ^/([a-z]{2})(/.*)?$ /$2?lang=$1; 
    } 
    ... 
} 
関連する問題