По какой-то причине www.server-1.com/forum не перенаправляет на forum.server-1.com, а на www.server-2.com. Когда я удаляю часть, где он перенаправляет www.server-1.com на www.server-2.com, все работает как часы... ну, не совсем, так как первый слеш после forum get каким-то образом теряется в процессе, когда 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;
}
решение1
nginx не обязательно обрабатывает директивы в том порядке, в котором они указаны в файле конфигурации. Директивы перезаписи на уровне сервера будут обработаны до выбора местоположения, что объясняет наблюдаемое вами поведение. Поскольку все на сервере — это просто переписывание, вы должны иметь возможность использовать это:
server {
server_name www.server-1.com;
rewrite ^/forums?(.*) http://forum.server-1.com$1 redirect;
return 302 http://www.server-2.com/;
}