简体   繁体   English

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

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

How can i redirect from www to non www for this rule ~^(?\\w+).example.com ? 对于该规则〜^(?\\ w +)。example.com,我如何从www重定向到非www?

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

I try separate main domain redirect and all subdomains redirect but have recursive redirection for main domain. 我尝试使用单独的主域重定向和所有子域重定向,但是对主域具有递归重定向。

server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

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

Then i try only 然后我只尝试

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

and that work for subdomains. 并且适用于子域。 But in main domain i have redirect for $request_uri without domain. 但是在主域中,我可以重定向到$ request_uri而不使用域。

One thing to remember is that if nginx cannot find a matching server_name it will use the default server. 要记住的一件事是,如果nginx找不到匹配的server_name ,它将使用默认服务器。 And unless you define a default_server , it will use the first server block listening on the appropriate port. 并且除非定义default_server ,否则它将使用第一个server块在适当的端口上进行侦听。 See this document for details. 有关详细信息,请参见此文档

Clearly example.com does not match the regular expression ~^(?<subdomain>\\w+)\\.example\\.com$ , however, your current server block works because it is the implicit default server. 显然example.com与正则表达式~^(?<subdomain>\\w+)\\.example\\.com$不匹配,但是,您当前的server块有效,因为它是隐式默认服务器。

Regular expression server blocks are evaluated in order, so place the www. 正则表达式server块按顺序求值,因此放置www. rule first so that www.example.com is not treated as a subdomain. 请先执行规则,以免将www.example.com视为子域。

Make the main server block default explicitly so that it continues to handle 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