Nginx가 잘못 다시 작성됨

Nginx가 잘못 다시 작성됨

어떤 이유로 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/;
}

관련 정보