Как добавить переменную к каждому запросу в Nginx? - PullRequest
1 голос
/ 05 мая 2011

У меня есть ситуация, когда мне нужно добавить код страны ко всем запросам в nginx.

Например, если пользователь имеет доступ http://example.com:3333/html/about,, я должен перенаправить (используя переписать в nginx) к http://example.com:3333/html/about?country_code=en

У меня есть следующая перезапись, но я получаю «слишком много циклов».

rewrite ^(.*)$ http://$host:3333/$1?country_code=en last;

Как это исправить?

nginx.conf

server {
    ### USA specific config ###                                                                                                                                                                     
    if ($geoip_country_code = US) {
        # do something here for USA visitors;
        # root path /var/www/html/content/usa/;                                                                                                                                                     
        rewrite ^(.*)$ http://$host:3333/$1?country_code=en last;
    }
}

Ответы [ 2 ]

3 голосов
/ 05 мая 2011
if ($geoip_country_code = US) {
    set $test "US";
}
if ($arg_country_code != 'en') {
    set $test "{$test}_R";
}
if ($test = 'US_R') {
    rewrite ^(.*)$ http://$host:3333/$1?country_code=en last;
}
0 голосов
/ 05 мая 2011

Попробуйте это:

оригинал:

rewrite ^(.*)$ http://$host:3333/$1?country_code=en

новый:

rewrite ^(.*)(?!\?country_code=[a-z][a-z])$ http://$host:3333/$1?country_code=en

Я предполагаю, что nginx поддерживает негативные утверждения с использованием общего синтаксиса (?!...). Отрицательный взгляд говорит, что совпадение (и переписывание) должно произойти, когда ?country_code=nn не в конце URL. (Если он находится в середине URL-адреса, перезапись все равно произойдет.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...