gpt4 book ai didi

regex - 匹配除 mod_rewrite 中的一个之外的所有子域

转载 作者:行者123 更新时间:2023-12-01 08:42:03 25 4
gpt4 key购买 nike

好的,所以我正在执行 mod_rewrite,并且我需要匹配除一个之外的任何子域。它开始看起来像这样。

RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com$ [NC]

这样可以匹配并捕获单个子域,没有句点。但是假设我不想匹配名为“dog”的子域。我试图用这样的负面前瞻性来做到这一点。

RewriteCond %{HTTP_HOST} ^((?!dog)[^\.]+)\.example\.com$ [NC]

这在大多数情况下都有效。 dog.example.com 不再匹配,这很好。但是,doggies.example.com 也不再匹配。这不好。

我能够通过使用负前瞻和负后瞻来解决这个问题。

RewriteCond %{HTTP_HOST} ^((?!dog)[^\.]+(?<!dog))\.example\.com$ [NC]

这行得通。据我所知,它工作得很好。问题是,我无法相信这是实现这场比赛的最佳方式。前瞻后瞻?真的吗?实现等价表达式的“正确”方式是什么?

最佳答案

如果你想使用负前瞻,你需要将表达式锚定到点:

RewriteCond %{HTTP_HOST} ^((?!dog\.)[^.]+)\.example\.com$ [NC]

否则任何以 dog 开头的东西都不允许。

这同样适用于消极的lookbehind:

RewriteCond %{HTTP_HOST} ^([^\.]+(?<!^dog))\.example\.com$ [NC]

使用 ^ 将其锚定到字符串的开头将确保仍然允许以 dog 结尾的内容,例如 catdog

另一个类似于 Vinko Vrsalovic 提到的解决方案是测试第一个子匹配的内容:

RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ [NC]
RewriteCond %1 !^dog$

关于regex - 匹配除 mod_rewrite 中的一个之外的所有子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1302011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com