Redirect nginx www重定向到具有子域的非www

Redirect nginx www重定向到具有子域的非www,redirect,nginx,Redirect,Nginx,如何将此规则~^(?\w+).example.com从www重定向到非www server { listen 80; listen [::]:80 ipv6only=on; server_name ~^(?<subdomain>\w+)\.example\.com$; } 那我就试试看 server { server_name "~^www\.(.*)$" ; return 301 $scheme://$1$request_uri ; }

如何将此规则~^(?\w+).example.com从www重定向到非www

server {
    listen 80;
    listen [::]:80 ipv6only=on;
    server_name ~^(?<subdomain>\w+)\.example\.com$;
}
那我就试试看

server {
     server_name "~^www\.(.*)$" ;
     return 301 $scheme://$1$request_uri ;
}

这适用于子域。但是在主域中,我重定向了$request\u uri而没有域。

需要记住的一点是,如果
nginx
找不到匹配的
服务器名称,它将使用默认服务器。除非您定义了一个
默认\u服务器
,否则它将使用第一个
服务器
块监听相应的端口。有关详细信息,请参阅

显然
example.com
与正则表达式
~^(?\w+)\.example\.com$
不匹配,但是,您当前的
服务器
块可以工作,因为它是隐式默认服务器

正则表达式
server
块是按顺序计算的,因此请先放置
www.
规则,以便
www.example.com
不被视为子域

将主
服务器
块显式设为默认值,以便它继续处理
example.com

server {
    server_name "~^www\.(.*)$" ;
    return 301 $scheme://$1$request_uri ;
}
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name ~^(?<subdomain>\w+)\.example\.com$;
    ...
}
服务器{
服务器名称“^www.*)$”;
返回301$scheme://$1$request\u uri;
}
服务器{
监听80个默认_服务器;
侦听[:]:80默认_服务器ipv6only=on;
服务器名称~^(?\w+)\.example\.com$;
...
}
server {
    server_name "~^www\.(.*)$" ;
    return 301 $scheme://$1$request_uri ;
}
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name ~^(?<subdomain>\w+)\.example\.com$;
    ...
}