nginx:重写除一个位置以外的所有内容


11

现在,我的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/+-我在做什么错?

Answers:


14

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;
  }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.