Quem encontrou isso online e tenta copiar e colar as respostas sugeridas, tenha cuidado se estiver usando uma configuração do Virtualbox com portas personalizadas. Eu tive que mudar para ser, por exemplo, rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;onde 4321 é a porta externa do nginx do Virtualbox ao qual meu navegador se conecta.
aexl
Respostas:
6
Eu 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 do nginx - fusão de barras, portanto, não precisamos substituir barras, simplesmente redirecionando
'merge_slashes off' não fez diferença e não resultou em alterações.
Anup Nair
1
Por que merge_slashes on;simplesmente não funciona? O nginx é buggy?
Jonathan
1
@ Jonathan - acabei de me deparar com isso também. Pelo que entendi, isso merge_slashes onnão faz o que você está pensando. Basicamente, diz ao nginx para aceitar // e / e /// como uma única barra (para não mesclar e redirecionar por conta própria)
Andrew Newby
1
Falo da experiência de executar vários servidores de produção e servidores de desenvolvimento para uma equipe. Não faça isso no nginx. Em vez disso, use seu roteador dentro do servidor de aplicativos (JS / PHP etc).
O Nginx não é confiável para trabalhos substantivos. Por exemplo, redirecionamentos, reescritas e ifcláusulas não são determinísticas se você alterar sua configuração para usar SSL, um proxy reverso, portas ocultas e assim por diante. Portanto, você pode fazê-lo funcionar corretamente em um ambiente, mas pode ser impossível continuar trabalhando em outro.
Atenha-se a uma linguagem de programação adequada para resolver problemas, mesmo que simples como a barra dupla. Você me agradecerá mais tarde.
Embora eu concorde com sua opinião, acredito que devemos dar às pessoas a opção de formar sua própria opinião sobre o assunto. Eu prefiro o Apache ao Nginx, pelo mesmo motivo que o seu. Observe que o Apache mod_rewrite também pode ser considerado como uma linguagem de programação simples. :-)
rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;
onde 4321 é a porta externa do nginx do Virtualbox ao qual meu navegador se conecta.Respostas:
Eu gostaria de sugerir esta abordagem:
Ele usa o comportamento padrão do nginx - fusão de barras, portanto, não precisamos substituir barras, simplesmente redirecionando
encontrado aqui
fonte
proxy_pass
Eu achei a resposta do kwo para não funcionar. Olhando para o meu log de depuração, é isso que acontece:
Eu achei que isso funcionou para mim:
Ref: http://rosslawley.co.uk/archive/old/2010/01/10/nginx-how-to-url-cleaning-removing/
fonte
Tente o seguinte:
Pode haver vários redirecionamentos para barras> 3 ou vários grupos de barras.
fonte
merge_slashes on;
simplesmente não funciona? O nginx é buggy?merge_slashes on
não faz o que você está pensando. Basicamente, diz ao nginx para aceitar // e / e /// como uma única barra (para não mesclar e redirecionar por conta própria)Falo da experiência de executar vários servidores de produção e servidores de desenvolvimento para uma equipe. Não faça isso no nginx. Em vez disso, use seu roteador dentro do servidor de aplicativos (JS / PHP etc).
O Nginx não é confiável para trabalhos substantivos. Por exemplo, redirecionamentos, reescritas e
if
cláusulas não são determinísticas se você alterar sua configuração para usar SSL, um proxy reverso, portas ocultas e assim por diante. Portanto, você pode fazê-lo funcionar corretamente em um ambiente, mas pode ser impossível continuar trabalhando em outro.Atenha-se a uma linguagem de programação adequada para resolver problemas, mesmo que simples como a barra dupla. Você me agradecerá mais tarde.
fonte
Eu gosto desta solução:
Consulte https://stackoverflow.com/a/27071557/548473
fonte
URL example.com//dir1////dir2///dir3 e mais Tente isso, está funcionando para mim
merge_slashes off; localização ~ ^ (. *?) // + (. *?) $ {return 301 $ 1 / $ 2; }
fonte