如何在NGINX中redirect一个url

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

在服务器块,我尝试添加

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

但在浏览器中说

  The page isn't redirecting properly Firefox has detected that the server is redirecting the request for this address in a way that will never complete. 

我的服务器块看起来像

  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; } } 

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

 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_namevariables,如下所示:

 server_name www.test.com; 

重要 :新的server块是正确的方式来做到这一点, if是邪恶的 。 如果可能,您必须使用位置和服务器。 Rewrite有时也是邪恶的 ,所以用return代替它。

类似于这里的另一个答案,但改变中的http重写为$scheme如下所示:

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

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

 server_name www.test.com; 

我必须这样做,将www.test.comredirect到test.com。

首先确保你已经安装了Nginx的HTTP重写模块。 要安装这个,我们需要有pcre库

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