Como remover a barra dupla nos URLS servidos pelo nginx?

7

Eu preciso replicar as seguintes regras de reescrita do Apache na configuração do nginx. Qual é o equivalente nginx a:

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

O ambiente alvo é o Ubuntu 12.04

    
por codecowboy 13.03.2013 / 14:16

3 respostas

3

Gostaria de sugerir esta abordagem:

# remove multiple sequences of forward slashes
# rewrite URI has duplicate slashes already removed by Nginx (merge_slashes on), just need to rewrite back to current location
# note: the use of "^[^?]*?" avoids matches in querystring portion which would cause an infinite redirect loop
if ($request_uri ~ "^[^?]*?//") {
rewrite "^" $scheme://$host$uri permanent;
}

Ele usa o comportamento padrão de nginx - mesclar barras, então não precisamos substituir barras, simplesmente redirecionando

encontrado aqui

    
por 14.10.2014 / 09:48
2

Eu encontrei a resposta do kwo para não funcionar. Olhando para o meu log de depuração, é isso que acontece:

2014/08/18 15:51:04 [depuração] 16361 # 0: 1 regex de script http: "(. ) // + (. *)" 2014/08/18 15:51:04 [aviso] 16361 # 0: 1 "(. ) // + (. *)" Não corresponde "/ entre em contato /", cliente: 59.167.230.186, server: * .domain.edu, request: "GET ////// entre em contato conosco //// HTTP / 1.1", host: "test.domain.edu"

Eu achei que isso funcionou para mim:

if ($request_uri ~* "\/\/") {
  rewrite ^/(.*)      $scheme://$host/$1    permanent;
}

Ref: link

    
por 18.08.2014 / 07:56
0

Tente isto:

merge_slashes off;
rewrite (.*)//+(.*) $1/$2 permanent;

Pode haver vários redirecionamentos para barras > 3 ou vários grupos de barras.

    
por 13.03.2013 / 19:06

Tags