2017-09-19 1 views
0

나는 다음과 같은 한 Nginx에의 설정 default.conf :Nginx에서 어떻게 다국어 설정을 할 수 있습니까?

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) 언어가 enru 인 경우 모두 /*에 대한 경로 /en/*으로 요청 하시겠습니까?

답변

0

당신은 루트 URL에 대한 그래서 같은 언어 섹션에 대한 두 개의 분리 된 location 블록을 적용 할 필요가 : 당신의 질문 1)에

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 블록 답변 3) 루트 URL이 함께 다시 작성 곳 변수는 map 섹션에서 나오고 마지막 변수는 기본값으로 en 언어를 사용한다는 것을 정의합니다.

두 번째 location 블록은 2 가지 경로로 언어 매개 변수를 수락 한 다음 필요에 맞게 URL을 다시 작성합니다.

이 코드는 100 % 작동하지 않을 수도 있지만 아이디어를 제공해야합니다.

UPDATE

음, 사실 당신은 하나의 단일 패스에서이 작업을 수행 할 수 있습니다

location/{ 
    if ($uri !~ '^/([a-z]{2})(/.*)?$') { 
     rewrite^$scheme://$host/$lang$uri permanent; 
     rewrite ^/([a-z]{2})(/.*)?$ /$2?lang=$1; 
    } 
    ... 
} 
관련 문제