正确的nginx重定向

之前给nginx做301重定向的时候经常会这样写:

server {
    listen       80;
    server_name  www.nginx.org  nginx.org;
    if ($http_host = nginx.org) {
        rewrite  (.*)  http://www.nginx.org$1;
    }
    ...
}

而今天在 nginx docs 上看到这是不正确的。。。。

正确的写法应该是这样的:

server {
    listen       80;
    server_name  nginx.org;
    return       301 http://www.nginx.org$request_uri;
}

server {
    listen       80;
    server_name  www.nginx.org;
    ...
}

这好像只能在较新版本的 nginx 中才有用,在0.9.1版本(含)以前,可以这样实现重定向:

rewrite ^ http://www.nginx.org$request_uri?;

EOF