nginx 0.7.65 reescrita não funciona para barras duplas?

2

Usando o Nginx 0.7.65, passei algumas horas tentando conseguir o que parecia ser uma simples nginx reescrita para funcionar. Mas as duas barras não parecem funcionar corretamente:

URL anterior: link

URL depois: link

Eu usei a seguinte seção de reescrita no meu nginx.conf:

#try 1
location ~* \.jpg {
  (.*)//(image.jpg) $1/300/$2 permanent;
}

Não funcionou. Alguma idéia de como obter o nginx reescrita para trabalhar corretamente com duas barras? Eu tentei escapar das barras usando // mas isso também não ajudou em nada. Devo tentar atualizar para o nginx 0.8 e isso deve resolvê-lo?

Eu também tentei estes (cada um separadamente) e eles não funcionaram. Eu sou redirecionado para uma página de erro 404:

#try 2
location ~* \.jpg {
  rewrite "^(.*)([/]{2})image\.jpg$" $1/300/image.jpg permanent;
}

#try 3
location ~* \.jpg {
  rewrite (.+)//image\.jpg $1/300/image.jpg permanent;
}

#try 4
location ~* \.jpg {
  rewrite (.+)//(image.jpg) $1/300/$2 permanent;
}
    
por John Albietz 08.03.2011 / 01:20

2 respostas

2

O motivo é rewrite module redimensionar automaticamente a barra ao analisar a solicitação. Se você der uma olhada no log de erros, verá algo assim:

[notice] 5883 # 0: 1 "(. +) // (image.jpg)" não corresponde "/uploads / image.jpg", cliente: 127.0.0.1, servidor: localhost , request: "GET /uploads // image.jpg HTTP / 1.1", host: "localhost"

No entanto, você pode usar a variável $request_uri para manter o URI de solicitação original recebido do cliente:

    location ~* \.jpg {
        if ($request_uri ~ "(.+)\/\/(.+\.jpg)") {
            set $folder_uri $1;
            set $file_uri $2;
            rewrite .* $folder_uri/300/$file_uri permanent;
        }
    }
    
por 14.09.2011 / 20:39
0

Seu regex parecia estar errado, pois há apenas dois grupos de captura. Tente isto:

(.+)//(image.jpg) $1/300/$2

Eu também fiz o * a + como você provavelmente quer que alguma coisa esteja na frente das barras.

    
por 08.03.2011 / 04:06