[server] nginx : 한 위치를 제외한 모든 것을 다시 작성

지금 내 nginx는 여러 도메인을 사용중인 하나의 기본 도메인으로 다시 작성합니다. 내 구성의 규칙은 다음과 같습니다.

server {
  listen X.X.X.X:80;
  server_name .exampleblog.org;
  rewrite ^(.*) http://blog.example.org$1 permanent;
}

** exampleblog.org *에 대한 모든 요청은 blog.example.org로 리디렉션됩니다.

이제 www.exampleblog.org/+exampleblog.org/+ 를 통해 사용자를 Google Plus 페이지로 리디렉션하고 싶습니다 . 다른 버전을 시도했습니다.

server {
  listen X.X.X.X:80;
  server_name .exampleblog.org;
  location /+ {
    rewrite ^ https://plus.google.com/12345678901234567890/ permanent;
  }
  rewrite ^(.*) http://blog.example.org$1 permanent;
}

위와 다른 버전은 blog.example.org/+로 리디렉션됩니다. 제가 뭘 잘못하고 있습니까?



답변

nginx의 지시문이 반드시 구성 파일에 나타나는 순서대로 적용되는 것은 아닙니다. 서버 수준 다시 쓰기는 위치를 선택하기 전에 작동하며 항상 일치하므로 모든 것을 리디렉션합니다. 다음과 같은 두 번째 위치가 필요합니다.

server {
  listen x.x.x.x:80;
  server_name .exampleblog.org;

  # Match /+ requests exactly
  location = /+ {
    # I prefer return 301 instead of rewrite ^ <target> permanent,
    # but you can use either
    return 301 http://plus.google.com/1234567890/;
  }

  # Match everything else
  location / {
    return 301 http://blog.example.org$request_uri;
  }
}


답변