Nginx 仅将根域而不是子域重定向到 www
Nginx redirect only root domain but not subdomain to www
目前我正在使用下面的设置将非 www 域重定向到 www 域并且工作正常:
server {
listen 80;
server_name example.com;
return 301 http://www.example.com$request_uri;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://www.example.com:8888;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
但是,现在我想允许通配符子域,但似乎所有子域都被重定向到 www.domain.com。所以我的问题是如何让它只将根域重定向到 www 而排除所有其他子域?谢谢
第一个服务器块也是隐含的默认服务器,这意味着任何不匹配www.example.com
的域名都将由它处理。
如果您希望第二个服务器块处理除 example.com
之外的所有域,您可以通过添加 default_server
选项添加到 listen
指令。有关详细信息,请参阅 this document。
例如:
server {
listen 80;
server_name example.com;
return 301 http://www.example.com$request_uri;
}
server {
listen 80 default_server;
...
}
目前我正在使用下面的设置将非 www 域重定向到 www 域并且工作正常:
server {
listen 80;
server_name example.com;
return 301 http://www.example.com$request_uri;
}
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass http://www.example.com:8888;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
但是,现在我想允许通配符子域,但似乎所有子域都被重定向到 www.domain.com。所以我的问题是如何让它只将根域重定向到 www 而排除所有其他子域?谢谢
第一个服务器块也是隐含的默认服务器,这意味着任何不匹配www.example.com
的域名都将由它处理。
如果您希望第二个服务器块处理除 example.com
之外的所有域,您可以通过添加 default_server
选项添加到 listen
指令。有关详细信息,请参阅 this document。
例如:
server {
listen 80;
server_name example.com;
return 301 http://www.example.com$request_uri;
}
server {
listen 80 default_server;
...
}