Nginx reescreve incorretamente

1

Por alguma razão, www.server-1.com/forum não redireciona para forum.server-1.com, mas www.server-2.com. Quando eu apago a parte onde ele redireciona www.server-1.com para www.server-2.com ele funciona como um encanto ... bem, não é bem assim, já que a primeira barra após o fórum é perdida de alguma forma no processo URL não termina com / forum mas, por exemplo, com /forum/index.php.

# Redirect www.server-1.com/forum to forum.server-1.com
# Redirect www.server-1.com/forum/ to forum.server-1.com
# Redirect www.server-1.com/forums to forum.server-1.com
# Redirect www.server-1.com/forums/ to forum.server-1.com
# Redirect www.server-1.com to www.server-2.com
server {
  listen 80;

  server_name www.server-1.com;

  location = /forum {
    rewrite ^ http://forum.server-1.com redirect;
    break;
  }

  location /forum/ {
    rewrite ^/forum/(.*) http://forum.server-1.com$1 redirect;
    break;
  }

  location = /forums {
    rewrite ^ http://forum.server-1.com redirect;
    break;
  }

  location /forums/ {
    rewrite ^/forums/(.*) http://forum.server-1.com$1 redirect;
    break;
  }

  rewrite ^ http://www.server-2.com redirect;
}

# Redirect forum.server-1.com to www.server-3.com/forum (where the forum is hosted)
server {
  listen 80;

  server_name forum.server-1.com;

  rewrite ^(.*) http://www.server-3.com/forum$1 redirect;
}

# Redirect forums.server-1.com to forum.server-1.com
server {
  listen 80;

  server_name forums.server-1.com;

  rewrite ^(.*) http://forum.server-1.com$1 redirect;
}

# Redirect server-1.com and *server-1.com to www.server-1.com
server {
  listen 80;

  server_name server-1.com *.server-1.com;

  rewrite ^(.*) http://www.server-1.com$1 redirect;
}
    
por Oliver K. 22.11.2011 / 10:13

1 resposta

1

O nginx não processa necessariamente diretivas na ordem em que aparecem no arquivo de configuração. as diretivas de reconfiguração no nível do servidor serão processadas antes da seleção do local, o que explica o comportamento que você está vendo. Como tudo no servidor é apenas uma reescrita, você deve poder usar isso:

server {
  server_name www.server-1.com;

  rewrite ^/forums?(.*) http://forum.server-1.com$1 redirect;
  return 302 http://www.server-2.com/;
}
    
por 22.11.2011 / 12:31