Nginx: Não redireciona sem trailing /

1

Eu tenho um problema em que o Nginx me redireciona para o URL incorreto se não houver trailing / provided.

Eu tenho a configuração haproxy para delegar as solicitações entre vários servidores.

saída de curvas:

➜  ~  curl -i www.ordify.com/register
HTTP/1.1 301 Moved Permanently
Server: nginx/1.1.19
Date: Tue, 14 Aug 2012 08:10:39 GMT
Content-Type: text/html
Content-Length: 185
Location: http://www.ordify.com:4000/register/
Connection: close

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>

Configuração do Nginx:

server {
    listen *:4000;
    server_name ordify.com;
    access_log  /var/log/nginx/website-com.log;
    rewrite_log on;
    error_page 405 = $uri;

    location / {
      root   /home/website/en/;
      index  index.html index.htm;
    }
    if ($host != 'www.ordify.com' ) {
        rewrite  ^/(.*)$  http://www.ordify.com/$1  permanent;
    }
    rewrite /registrieren/ http://www.ordify.com/register/ permanent;
    rewrite /presse/ http://www.ordify.com/press/ permanent;

}

Eu já tentei usar o link sem sucesso.

    
por Hendrik 14.08.2012 / 10:14

1 resposta

0

if ($host != 'www.ordify.com' ) {
    rewrite  ^/(.*)$  http://www.ordify.com/$1  permanent;
}

Esta é uma maneira ineficaz. Consulte: link

O caminho certo é definir um servidor separado para capturar todos os outros domínios. Nomes de servidores podem ser definidos usando expressões regulares. Tente isto:

server {
    listen      *:4000;
    server_name www.ordify.com;
    ...
}

server {
    listen      *:4000;
    server_name ~^(?!www)\.ordify\.com$;
    return      301 http://www.ordify.com$request_uri;
    ...
}

?!www - lookahead negativo , significa que corresponde a algo não seguido por www .

    
por 14.08.2012 / 10:55

Tags