Nginx www重定向到具有子域的非www [英] nginx www redirect to non-www with subdomain

查看:85
本文介绍了Nginx www重定向到具有子域的非www的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How can i redirect from www to non www for this rule ~^(?\w+).example.com ?

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 ;
}

然后我只能尝试

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

,并且适用于子域.但是在主域中,我可以重定向为$ request_uri,而没有域.

and that work for subdomains. But in main domain i have redirect for $request_uri without domain.

推荐答案

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

One thing to remember is that if nginx cannot find a matching server_name it will use the default server. And unless you define a default_server, it will use the first server block listening on the appropriate port. See this document for details.

很明显example.com与正则表达式~^(?<subdomain>\w+)\.example\.com$不匹配,但是,您当前的server块是有效的,因为它是隐式默认服务器.

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.

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

Regular expression server blocks are evaluated in order, so place the www. rule first so that www.example.com is not treated as a subdomain.

显式地将主server块设置为默认,以便其继续处理example.com.

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

这篇关于Nginx www重定向到具有子域的非www的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆