Como adicionar um parâmetro a nginx query_string durante o redirecionamento

2

Eu quero adicionar um parâmetro à string $ query. Agora eu tenho essa configuração

server {
    server_name example.com;
    listen 80;

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

Mas quero adicionar test=1 na consulta. Existem casos de uso:

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

Eu tentei dividir $ request_uri em $ uri e $ query_param e recebi

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

Mas não posso simplesmente adicionar test = 1 nessa string. Se eu adicionar ?test=1 , então no terceiro caso eu vou receber http://test.example.com/example/?var=1?test=1 . Se eu adicionar &test=1 no primeiro e segundo casos, receberei http://test.example.com&test=1 e http://test.example.com/example&test=1 .

Agora eu verifico meu $ query_string por essas regras:

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;
}

Mas acho que há uma decisão mais clara para essa tarefa.

    
por abr_stackoverflow 14.05.2018 / 11:01

1 resposta

3

Você pode usar rewrite em vez de return . A diretiva rewrite já contém a lógica para anexar sequências de consulta adicionais corretamente.

Por exemplo:

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

Na página de manual :

If a replacement string includes the new request arguments, the previous request arguments are appended after them

    
por 14.05.2018 / 11:29