文章目录
server { listen 80; listen 443 ssl http2 ; server_name google.com www.google.com ~^(?<subdomain>.+)\.google\.com$; if ($host != 'www.google.com'){ return 301 http://www.google.com$request_uri; } }
^(?<subdomain>.+)\.domain\.com$ 和 ^(?<subdomain>[0-9]+)\.domain\.com$ 有什么区别?
^(?<subdomain>[0-9]+)\.domain\.com$
- 匹配:只匹配以一个或多个数字作为子域名的域名。
- 示例:
123.domain.com
,4567.domain.com
- 不匹配:
abc.domain.com
,a1b2.domain.com
详细解释:
^
:匹配字符串的开始。(?<subdomain>[0-9]+)
:一个命名捕获组,名为subdomain
,匹配一个或多个数字[0-9]+
。\.domain\.com$
:匹配字符串以.domain.com
结尾。
^(?<subdomain>.+)\.domain\.com$
- 匹配:匹配以一个或多个任意字符作为子域名的域名。
- 示例:
abc.domain.com
,123.domain.com
,a1b2.domain.com
,-_.domain.com
- 不匹配:
domain.com
(没有子域名的情况)
详细解释:
^
:匹配字符串的开始。(?<subdomain>.+)
:一个命名捕获组,名为subdomain
,匹配一个或多个任意字符.+
。\.domain\.com$
:匹配字符串以.domain.com
结尾。
总结
[0-9]+
:- 只匹配一个或多个数字作为子域名。
- 更加具体和限制严格。
.+
:- 匹配一个或多个任意字符作为子域名。
- 更加宽泛和灵活。
选择哪一个取决于你希望子域名部分的匹配规则。如果你只希望匹配数字作为子域名,使用第一个表达式;如果你希望子域名可以包含任意字符,使用第二个表达式。
早救災阿