我正在尝试设置一个 nginx 服务器,以便动态加载域中某个文件夹的内容。为此,我在服务器名称中使用正则表达式,如下所示:
server_name ((?<subdomain>.+)\.)?(?<domain>.+)\.(?<tld>.*);
这将创建 3 个变量供 nginx 稍后使用,例如当使用以下 url 时:test.foo.example.com
其计算结果为:
- $子域名 = test.foo
- $domain = 示例
- $tld = com
当使用 co.uk 顶级域名时,就会出现问题。在这种情况下,使用 url 时,test.foo.example.co.uk
它将评估为:
- $子域名 = test.foo.cedira
- $domain = co
- $tld = 英国
我如何编辑正则表达式以使其也适用于 co.uk?
答案1
这能够检查 www 部分,并且它仅将第一个捕获作为子域,第二个捕获作为域,其余部分作为主机域:
server_name ~^(www\.)?((?<subdomain>.+?)\.)?((?<domain>.+?)\.)?(?<host_domain>.+)\.(?<tld>co.uk)$ ~^(www\.)?((?<subdomain>.+?)\.)?((?<domain>.+?)\.)?(?<host_domain>.+)\.(?<tld>.*)$;
答案2
我发现可以定义多个 server_name,因此我简单地将两个正则表达式作为 server_name,如果第一个失败,它将自动选择第二个。
server_name ~^((?<subdomain>.+)\.)?(?<domain>.+)\.(?<tld>co.uk)$ ~^((?<subdomain>.+)\.)?(?<domain>.+)\.(?<tld>.*)$;
我猜它也可以用一个正则表达式来完成,我仍然想知道如何做,但现在我将使用这个解决方案。