Nginx重写,以消除“www”不工作

我已经看了许多SE线程,并做了各种谷歌search ,不知道为什么我不能将www.mysite.comredirect到我的nginx服务器上的mysite.com

第一个服务器块按照你的预期做了http://mysite.info – > https://mysite.inforedirect。 所以我不知道为什么第二个服务器块不会为www.mysite.info – > mysite.info做同样的mysite.info

这里是我的nginx.conf文件的相关部分:

 server { server_name mysite.info; rewrite ^ https://$server_name$request_uri? permanent; } server { server_name www.mysite.info; rewrite ^ https://mysite.info$request_uri? permanent; } server { listen 443; ssl on; server_name mysite.info; # other directives, handling PHP, etc. } 

有什么想错了?

您正在第二个server块中redirect到$server_name ,即www.mysite.info ,因此所有操作都是redirect到HTTPS,而不是更改主机。

 rewrite ^ https://mysite.info$request_uri? permanent; 

这将处理主机中的更改以及对HTTPS的更改。

如果你想redirect是协议不可知的,更好的方法是:

 rewrite ^ $scheme://mysite.info$request_uri? permanent; 

在最近的nginx版本中,它也可以工作(应该快一些):

 return 301 $scheme://mysite.info$request_uri;