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