在迁移服务器上工作,并没有运气设置我的子域。 我正在寻找的行为相当简单:
我已经尝试在几个configuration使用$主机,我已经尝试使用许多变化:
server_name ~^(.*)\.domain\.com$;
root /var/www/$1;
和
server_name ~^(?<subdomain>.+)\.domain\.com$;
root /var/www/$subdomain ;
这是基本的NginX行为,但我完全难住,我浪费了太多的时间试图破解我的方式通过这个。 任何人都可以解释一下这个解决scheme吗?
提前致谢!
尝试这个:
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"; } }
你的第二个server_name指令看起来是正确的,应该工作(并且是最好的解决scheme恕我直言)。 该文档为较旧的PCRE版本提供了以下语法,因此您可以尝试以下操作:
server_name ~^(?P<subdomain>.+)\.domain\.com$; root /var/www/$subdomain;
其他人正在使用地图来帮助解决这个问题。 这里是地图的直接文档 。
还有一些其他的事情要检查:检查你使用的Nginx版本是否与最新版本一致。 如果你在网上阅读文档,他们可能会引用比你实际拥有的更新的行为。
另外,我的理解是,像?<subdomain>这样的反向引用语法是从libpcre部分启用的。 检查man pcrepattern ,看看它是否有“NAMED SUBPATTERNS”部分。