reescrita nginx acrescenta um parâmetro no final de um URL


13

Preciso configurar meu proxy reverso para que o seguinte parâmetro seja adicionado no final do URL: &locale=de-de

Isso quase funciona:

rewrite ^(.*)$ $1&locale=de-de break;

No entanto, o problema é que eu preciso anexar '& locale = de-de' apenas se ele ainda não estiver lá e se houver um '?' no URL ...

Posso obter ajuda para formular a regex correta para fazer isso?

Outra pergunta: por que o ponto de interrogação no meu URL não é mostrado se eu uso:
$ uri? $ Args

Ou $ uri $ is_args $ args traduz o URL não codificado e o ponto de interrogação é exibido como% 3f.

Ideias?

EDIT: Parece que esse comportamento existe ao usar em combinação com proxy_pass. Em uma simples reescrita, funciona muito bem.

Respostas:


15
  1. Em rewritevocê corresponde apenas à parte do caminho do URL . Que significa,$1 que não conterá a string de consulta.
  2. Por padrão, o Nginx anexa a string de consulta original à substituição de reescrita.

Portanto, deve ser seguro escrever

rewrite ^(.*)$ $1?locale=de-de break;

Caso você não queira que o Nginx acrescente a string de consulta original, basta especificar ?no final da URL de substituição:

rewrite ^(.*)$ $1?locale=de-de? break;

Obrigado! Não vi que tentei fazer da maneira errada.
Sascha

A + é a melhor resposta
Obrigado


3

o rewrite não modifica os parâmetros de solicitação, apenas a parte do caminho do URI. Na minha experiência, mexer nas reescritas leva a ciclos estranhos, nos quais o novo parâmetro é acrescentado ad infinitum. Reescrever provavelmente não é a maneira de fazer isso no Nginx.

Em vez disso, você deve modificar a $argsvariável usando a setdiretiva:

set $args $args&locale=de-de;

Eu discordo que $argsdeve ser modificado. Em vez disso, consulte a solução de @ AlexanderAzarov.
Obrigado
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.