繁体   English   中英

Nginx www重定向到具有子域的非www

[英]nginx www redirect to non-www with subdomain

对于该规则〜^(?\\ w +)。example.com,我如何从www重定向到非www?

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而不使用域。

要记住的一件事是,如果nginx找不到匹配的server_name ,它将使用默认服务器。 并且除非定义default_server ,否则它将使用第一个server块在适当的端口上进行侦听。 有关详细信息,请参见此文档

显然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$;
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM