Nginx adiciona barra sem reescrever

2

Estou tentando criar um redirecionamento para adicionar uma barra à direita

location / {
  if($request_uri ~ ^([^.]*[^/])$){
    return 301 https://$host$request_uri/;
  }
}

Eu não tenho ideia de como fazer a correspondência em if, quando eu simplesmente criar um redirecionamento com / - ele funciona, apenas esse regex parece estar quebrado.

UPDATE

Reescrevai, 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

    
por Sindis 15.05.2015 / 17:17

4 respostas

2

Há muito tempo resolvido, mas vejo muitas pessoas verificando essa questão, então, se bem me lembro, não tinha essa linha de código e estava me redirecionando:

port_in_redirect off;

Eu sei, eu não mencionei os portos em questão, de jeito nenhum poderia ser respondido, mas vou deixar aqui se alguém tiver o mesmo problema

    
por 19.11.2015 / 15:40
1

Se eu entendi a pergunta corretamente, você deseja veicular automaticamente, sem usar um redirecionamento 301, link quando a solicitação é para link sem barra final?

Se sim, encontrei esta configuração try_files para funcionar:

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 que contém o index.html, em que 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.
por 02.07.2015 / 18:23
0

Isso parece funcionar como esperado:

location / {
    if ($request_uri ~ ^([^.]*[^/])$) {
        return 301 https://$host$request_uri/;
    }
    try_files $uri $uri/ /index.html;
    ....
}

Não tenho certeza de ver a diferença com a que você tentou, exceto o erro de sintaxe que você deve ter encontrado devido à falta de espaços na instrução if (pode ser um erro de digitação). ... ou talvez porque você tem outras diretivas que você não mostra que substituem essa.

    
por 16.05.2015 / 15:31
-1

Espero que eu esteja entendendo você corretamente (não há representante suficiente para comentar)

Para redirecionar um diretório como / admin e adicionar um argumento à direita / você pode usar o retorno e um bloco de localização separado, por exemplo

location = /admin 
{
                    return  301 https://$server_name$request_uri/;
}

Isso, então, descartará a solicitação para

location /
{
......... rest of config
}

Veja o exemplo aqui, ajudou-me muito quando tive um problema semelhante. link especialmente a parte sobre processamento especial e /

    
por 15.05.2015 / 18:47

Tags