143

我需要将每个http://test.com请求重定向到http://www.test.com。如何才能做到这一点。

在服务器块中,我尝试添加

rewrite ^/(.*) http://www.test.com/$1 permanent;

但在浏览器中它说

页面未正确重定向

Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。

我的服务器块看起来像

 server {
            listen       80;
            server_name  test.com;
            client_max_body_size   10M;
            client_body_buffer_size   128k;

            root       /home/test/test/public;
            passenger_enabled on;
            rails_env production;

            #rewrite ^/(.*) http://www.test.com/$1 permanent;
            #rewrite ^(.*)$ $scheme://www.test.com$1;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                    root   html;
            }
    }
4

4 回答 4

283

做你想做的最好的方法是添加另一个服务器块:

server {
        #implemented by default, change if you need different ip or port
        #listen *:80 | *:8000;
        server_name test.com;
        return 301 $scheme://www.test.com$request_uri;
}

并编辑您的主服务器块 server_name 变量,如下所示:

server_name  www.test.com;

重要提示:新server块是正确的方法,if是邪恶的。如果可能,您必须使用位置和服务器ifRewrite有时也很邪恶,因此将其替换为return.

于 2012-04-24T18:29:54.293 回答
17

与此处的另一个答案类似,但将重写中的 http 更改为 $scheme,如下所示:

server {
        listen 80;
        server_name test.com;
        rewrite     ^ $scheme://www.test.com$request_uri? permanent;
}

并编辑您的主服务器块 server_name 变量,如下所示:

server_name  www.test.com;

我必须这样做才能将 www.test.com 重定向到 test.com。

于 2013-07-26T18:17:56.160 回答
10

首先确保您已经安装了带有 HTTP 重写模块的 Nginx。要安装它,我们需要 pcre-library

如何安装 pcre 库

如果上面提到的已经完成或者你已经有了它们,那么只需在你的 nginx 服务器块中添加下面的代码

  if ($host !~* ^www\.) {
    rewrite ^(.*)$ http://www.$host$1 permanent;
  }

要从您可以使用的每个请求中删除 www

  if ($host = 'www.your_domain.com' ) {
   rewrite  ^/(.*)$  http://your_domain.com/$1  permanent;
  }

所以你的服务器块看起来像

  server {
            listen       80;
            server_name  test.com;
            if ($host !~* ^www\.) {
                    rewrite ^(.*)$ http://www.$host$1 permanent;
            }
            client_max_body_size   10M;
            client_body_buffer_size   128k;

            root       /home/test/test/public;
            passenger_enabled on;
            rails_env production;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                    root   html;
            }
    }
于 2012-04-24T09:57:55.913 回答
9

这是“nginx 重定向”在 Google 上的热门搜索。如果您只是想重定向一个位置:

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}
于 2020-02-26T18:12:03.707 回答