Estou tentando criar um redirecionamento para adicionar uma barra final,
location / {
if($request_uri ~ ^([^.]*[^/])$){
return 301 https://$host$request_uri/;
}
}
Não tenho ideia de como fazer a correspondência no if, quando simplesmente crio o redirecionamento com / - funciona, apenas esse regex parece quebrado.
ATUALIZAR
Reescrever eu tentei
location / {
rewrite ^([^.]*[^/])$ $1/ permanent;
.....
}
e
if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}
funciona bem, redireciona para https, eu queria criar regex com ele também
Responder1
Há muito tempo resolvido, mas vejo muitas pessoas verificando esta questão, então, se bem me lembro, não tinha essa linha de código e ela estava me redirecionando:
port_in_redirect off;
Eu sei, não mencionei as portas em questão, de jeito nenhum isso poderia ser respondido, mas deixarei aqui se alguém tiver o mesmo problema
Responder2
Se entendi a pergunta corretamente, você deseja veicular automaticamente, sem usar um redirecionamento 301,http://example.com/foo/index.htmlquando o pedido é parahttp://example.com/foosem barra final?
Nesse caso, descobri que esta configuração try_files funciona:
try_files $uri $uri/index.html $uri/ =404;
- O primeiro
$uri
corresponde exatamente ao uri - O segundo
$uri/index.html
corresponde a um diretório contendo index.html onde o último elemento do caminho corresponde ao nome do diretório, sem barra final - O terceiro
$uri/
corresponde ao diretório - O quarto
=404
retorna a página de erro 404 se nenhum dos padrões anteriores corresponder.
Responder3
Isso parece funcionar conforme o esperado:
location / {
if ($request_uri ~ ^([^.]*[^/])$) {
return 301 https://$host$request_uri/;
}
try_files $uri $uri/ /index.html;
....
}
Não tenho certeza se vejo a diferença com o que você tentou, exceto o erro de sintaxe que você deveria ter encontrado devido à falta de espaços na if
instrução (pode ser um erro de digitação). ...ou talvez porque você tem outras diretivas que você não nos mostra e que substituem esta.