Nginx重写错误

出于某种原因,www.server-1.com/forum不会redirect到forum.server-1.com,而是www.server-2.com。 当我删除它redirectwww.server-1.com到www.server-2.com的部分,它就像一个魅力…好吧,不完全是,因为论坛后的第一个斜线得到不知何故在这个过程中,每当url并不以/ forum结尾,而是以/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; } 

nginx不一定按照它们在configuration文件中出现的顺序处理指令。 服务器级重写指令将在位置select之前处理,这解释了您所看到的行为。 由于服务器中的所有内容都是重写,所以应该可以使用这个:

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