Nginx 重写以消除“www”不起作用

Nginx 重写以消除“www”不起作用

我看过很多SE 线程并做了各种谷歌搜索并且无法弄清楚为什么我无法重定向www.mysite.commysite.com我的 nginx 服务器。

第一个服务器块按预期执行了http://mysite.info->https://mysite.info重定向。因此我不确定为什么第二个服务器块没有对www.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.
}

你知道到底出了什么问题吗?

答案1

您正在重定向到$server_name,它位于www.mysite.info第二个server块中 - 因此所做的只是重定向到 HTTPS,而不是更改主机。

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

这将处理主机的变化以及 HTTPS 的变化。

如果您希望重定向与协议无关,那么更好的方法是:

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

在较新版本的 nginx 上,这也有效(并且应该更快一些):

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

相关内容