nginx reescrita insensível a maiúsculas e minúsculas

14

Estou tentando fazer com que meus redirecionamentos nginx sejam o mais limpos possível. Eu entendo ~ * é para maiúsculas e minúsculas, mas só posso fazê-lo funcionar no exemplo 2.

Exemplo 1

rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

Exemplo 2 - Isso funciona, mas não é tão eficiente quanto a linha acima.

if ( $request_filename ~* foobar ) {
         rewrite ^ http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
   }

Existe uma maneira de fazer redirecionamentos insensíveis a maiúsculas e minúsculas com o exemplo 1 sem ficar muito confuso?

Obrigado.

    
por milleruni 12.04.2013 / 20:01

2 respostas

8

Acabei de ter (e consertei) esse mesmo problema e acabei tentando encontrar a resposta. A documentação do nginx ( link ), não afirma claramente que o * * funciona apenas dentro de uma declaração if, mas aparentemente, esse é o caso.

Para obter correspondência de expressão regular sem distinção entre maiúsculas e minúsculas para uma URL ngnix reescrita fora de uma instrução if, tive que usar o estilo Apache / Perl:

rewrite "(?i)foobar" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

Veja o link (procure insensível). Também parece que o prefixo (? I) fora de um grupo de captura específico o faz aplicar a toda a cadeia de pesquisa. Nota: Isto parece não funcionar com "^ (? I) foobar" porque parece que o "^" está implícito.

Só para ter certeza, porém, e para facilitar futuras manobras de redigir e menos ambíguas se você acabar fazendo um monte delas, você pode querer fazer algo assim:

location /foobar {
     rewrite "(?i)" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
}

Espero que isso ajude ...

    
por 13.04.2013 / 10:02
26

O que eu encontrei para fazer este trabalho:

rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

Você só precisa fazer isso:

rewrite (?i)^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;

Isso significa apenas prefixar (? i) e, de outro modo, tudo é igual para correspondência.

    
por 16.05.2013 / 15:49

Tags