Как добавить параметр в строку запроса nginx во время перенаправления

Я хочу добавить один параметр в строку запроса $. Теперь у меня есть этот конфиг

server {
    server_name example.com;
    listen 80;

    return 301 http://test.example.com$request_uri;
}

, но я хочу добавить в запрос test = 1 . Есть случаи использования:

http://example.com =>
    http://test.example.com?test=1

http://example.com/example =>
    http://test.example.com/example?test=1

http://example.com/example/?var=1 =>
    http://test.example.com/example/?var=1&test=1

Я попытался разделить $ request_uri на $ uri и $ query_param и получил

return 301 http://test.example.com$uri$query_string;

Но я не могу просто добавить test = 1 в эту строку. Если я добавлю ? Test = 1 так в третьем случае я получу http://test.example.com/example/?var=1?test=1 . Если я добавлю & test = 1 в первом и втором случаях, я получу http: //test.example.com&test=1 и http: // test. example.com/example&test=1.

Теперь я проверяю свою $ query_string по следующим правилам:

if ($query_string ~ ^$) {
    return 301 http://test.example.com$uri?test=test;
}

if ($query_string ~ ^.+$) {
    return 301 http://test.example.com$uri?$query_string&test=test;
}

Но я думаю, что есть более аккуратное решение для этой задачи.

2
задан 14 May 2018 в 12:01
1 ответ

റിട്ടേൺ എന്നതിനുപകരം നിങ്ങൾക്ക് മാറ്റിയെഴുതാം ഉപയോഗിക്കാം. തിരുത്തിയെഴുത്ത് നിർദ്ദേശത്തിൽ ഇതിനകം തന്നെ അധിക ചോദ്യ സ്ട്രിംഗുകൾ ശരിയായി കൂട്ടിച്ചേർക്കുന്നതിനുള്ള യുക്തി അടങ്ങിയിരിക്കുന്നു.

ഉദാഹരണത്തിന്:

rewrite ^ http://test.example.com$uri?test=1 permanent;

മാനുവൽ പേജിൽ നിന്ന് :

പകരം സ്‌ട്രിംഗിൽ പുതിയത് ഉൾപ്പെടുന്നുവെങ്കിൽ അഭ്യർത്ഥന വാദങ്ങൾ ,. മുമ്പത്തെ അഭ്യർത്ഥന ആർ‌ഗ്യുമെൻറുകൾ‌ അവയ്‌ക്ക് ശേഷം ചേർ‌ക്കുന്നു

4
ответ дан 3 December 2019 в 09:57

Теги

Похожие вопросы