nginx: viết lại tất cả trừ một vị trí


11

Ngay bây giờ nginx của tôi đang viết lại một số tên miền thành một tên miền chính mà chúng tôi đang sử dụng. Đây là một quy tắc từ cấu hình của tôi:

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

Mọi yêu cầu tới ** exampleblog.org * đều được chuyển hướng đến blog.example.org

Bây giờ tôi muốn www.exampleblog.org/+exampleblog.org/+ để chuyển hướng người dùng đến trang Google Plus của chúng tôi. Nó đã thử các phiên bản khác nhau của:

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;
}

Ở trên và các phiên bản khác chỉ cần chuyển hướng đến blog.example.org/+ - tôi đang làm gì sai?

Câu trả lời:


14

Các chỉ thị trong nginx không nhất thiết phải áp dụng theo thứ tự chúng xuất hiện trong tệp cấu hình. Viết lại ở cấp độ máy chủ trước khi chọn vị trí và nó luôn khớp, vì vậy nó sẽ chuyển hướng mọi thứ. Bạn cần một vị trí thứ hai như vậy:

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;
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.