如何在 Nginx 重定向网址

我需要将每个 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;
}
}
297632 次浏览

首先确保您已经安装了带有 HTTP 重写模块的 Nginx

如何安装 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;
}
}

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

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代替。

与这里的另一个答案类似,但是将重写中的 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。

这是谷歌“ nginx 重定向”的热门话题。如果你来这里只是想改变一个地点:

location = /content/unique-page-name {
return 301 /new-name/unique-page-name;
}