正在迁移服务器,但设置子域名却毫无进展。我所期望的行为相当简单:
- www.domain.com & domain.com --> /var/www/live/
- *.domain.com --> /var/www/*/(假设子目录存在,否则重定向到主站点)
我尝试过在几种配置中使用 $host,也尝试过使用以下多种变体:
server_name ~^(.*)\.domain\.com$;
root /var/www/$1;
和
server_name ~^(?<subdomain>.+)\.domain\.com$;
root /var/www/$subdomain
;
这是 NginX 的基本行为,但我完全不知所措,并且浪费了太多时间试图破解它。有人能解释一下解决方案吗?
提前致谢!
答案1
尝试这个:
server {
listen 80;
server_name example.com *.example.com;
root /var/www/example.com/$subdomain;
set $subdomain "";
if ($host ~* ^([a-z0-9-\.]+)\.example.com$) {
set $subdomain $1;
}
if ($host ~* ^(www.)?example.com$) {
set $subdomain "live";
}
}
答案2
您的第二server_name
条指令看起来正确并且应该有效(在我看来是最好的解决方案)。文档对于旧版本的 PCRE 建议以下语法,因此您可以尝试以下方法:
server_name ~^(?P<subdomain>.+)\.domain\.com$;
root /var/www/$subdomain;