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

现在我的nginx正在将几个域重写为我们正在使用的一个主域。 这是我的configuration中的一个规则:

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

每个对** exampleblog.org *的请求都被redirect到blog.example.org

现在我想让www.exampleblog.org/+exampleblog.org/+将用户redirect到Google Plus页面。 它尝试了不同的版本:

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

以上和其他版本只是redirect到blog.example.org/+ – 我做错了什么?

nginx中的指令不一定按照它们在configuration文件中出现的顺序。 服务器级重写在选定位置之前执行,并且总是匹配,因此它将redirect所有内容。 你需要像这样的第二个位置:

 server { listen xxxx: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; } }