nginx reescrever acrescentar um parâmetro no final de uma url

12

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

Isso quase funciona:

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

No entanto, o problema é que eu preciso acrescentar '& locale = de-de' somente se ele já não estiver e se houver um '?' na url ...

Posso obter ajuda para formular o regex correto para fazer isso?

Outra questão: Por que o ponto de interrogação na minha URL não é exibido se eu usar isso:
$ uri? $ args

Ou $ uri $ is_args $ args traduz a url não codificada e o ponto de interrogação é mostrado como% 3f.

Idéias?

EDIT: parece que esse comportamento existe enquanto estiver usando em combinação com proxy_pass. Em uma simples reescrita, funciona muito bem.

    
por Sascha 14.09.2011 / 22:36

3 respostas

13

  1. Em rewrite você corresponde apenas à parte do URL caminho . O que significa que $1 não conterá a string de consulta.
  2. Por padrão, o Nginx acrescenta 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 adicione a string de consulta original, basta especificar ? no final da URL de substituição:

rewrite ^(.*)$ $1?locale=de-de? break;
    
por 15.09.2011 / 10:04
3

A correspondência para rewrite não inclui os parâmetros da consulta, então você precisa testar isso em outro lugar.

Tente:

if ($args !~* locale=de\-de){
    rewrite ^(.*)$ $1&locale=de-de last;
}
    
por 14.09.2011 / 23:18
3

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

Em vez disso, você deve modificar a variável $args usando a diretiva set :

set $args $args&locale=de-de;
    
por 18.01.2012 / 11:45

Tags