如何为此规则从www重定向到非www?^(?\ w +)。example.com?
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name ~^(?<subdomain>\w+)\.example\.com$;
}
我尝试单独的主域重定向和所有子域重定向,但具有主域的递归重定向。
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
server_name "~^www\.(.*)$" ;
return 301 $scheme://$1$request_uri ;
}
然后我只尝试
server {
server_name "~^www\.(.*)$" ;
return 301 $scheme://$1$request_uri ;
}
和子域名的工作。但是在主域中,我没有域重定向$ request_uri。
答案 0 :(得分:0)
要记住的一件事是,如果nginx
找不到匹配的server_name
,它将使用默认服务器。除非您定义default_server
,否则它将使用侦听相应端口的第一个server
块。有关详细信息,请参阅this document。
显然example.com
与正则表达式~^(?<subdomain>\w+)\.example\.com$
不匹配,但是,您当前的server
块有效,因为它是隐式默认服务器。
正则表达式server
块按顺序进行评估,因此请先放置www.
规则,以便www.example.com
不被视为子域。
明确显示主server
块的默认值,以便继续处理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$;
...
}