现在我的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; } }