nginx从主域到子域重写规则

2 rewrite nginx

在我的nginx domain.cong中,我编写了以下重写规则...当请求到达主域(有或没有www)时,它会重定向到博客子域,但它似乎是错误的......

server {
....
##### Rewrite rules for domain.tld => www.domain.tld #####
if ($host ~* ^([^.]+\.[^.]+)$) {
    set $host_without_www $1;
    rewrite ^(.*) $scheme://www.$host_without_www$1 permanent;
}

##### Rewrite rules for www.domain.tld => subdomain.domain.tld #####
if ($host ~* 'www\.[^.]+\.[^.]+$')  {
    set $host_without_www $1.$2;
    rewrite ^(.*) $scheme://subdomain.$host_without_www$1 permanent;
} 
...
} 
Run Code Online (Sandbox Code Playgroud)

第一条规则是正确的:
domain.tld => www.domain.tld
但不是第二条规则
www.domain.tld => subdomain.
应该是
www.domain.tld => subdomain.domain.tld

Sud*_*ead 9

您的设置似乎有点过于复杂,并且在"if"中匹配$ host不是最佳做法.如果您只有一个域,那很简单:

server {
    # ...
    server_name domain.tld www.domain.tld;
    return 301 $scheme://subdomain.domain.tld$request_uri;
}

server {
    server_name subdomain.domain.tld;
    # ...
}
Run Code Online (Sandbox Code Playgroud)

如果您有许多域,则设置类似,只需在server_name上使用正则表达式和捕获变量