Nginx可以使用Perl正则表达式来监听不同的虚拟主机/服务器名称,等等。我正在尝试创建一个正则表达式以将 a 域与不同的 TLD 匹配,除了一个没有 www 子域的域。我一直在使用 RegExr 来帮助我创建一个初始正则表达式,并做了一些阅读以尝试进一步了解我的理解,但我无法完全理解如何做到这一点。
我一直在尝试创建一个正则表达式来匹配以下内容:
test.com (match)
www.test.com (match)
test.org (fail)
www.test.org (match)
test.net (match)
www.test.net (match)
test.biz (match)
www.test.biz (match)
到目前为止,我已经得到了:
~^(www.|)test.(com|org|net|biz)$
作为初始正则表达式,但我不确定如何添加异常以实现我想要的。
非常感谢,如果这看起来很简单,很抱歉。(第一次创建正则表达式,您可能知道。
^(www.test.org|(www.)?test.(com|net|biz))$
是直接的方法——只需将异常完全设置为异常即可。
我可以在PCRE正则表达式部分为您提供帮助,但是nginx部分可能会打嗝。
~^(?!test.org)(?:www.)?test.(?:com|org|net|biz)$
这使用否定的前瞻来确保字符串不能与"test.org"匹配,然后在"test."和TLD之前有一个可选的前缀"www."。
您可以找到对此(或任何正则表达式)的更彻底的演练,并注意您提供的每个测试的性能,regex101.com(不要介意我添加的标志,这些标志只是确保测试域在此环境中都匹配)。