如何匹配example.com
的所有子域(例如,123.example.com
、abc.example.com
等),此列表中的子域除外:
main1
main2
main3
.htaccess
中的此规则有助于在子域匹配时将robots.txt
更改为robots_sub.txt
。以下是一个示例:
RewriteCond %{HTTP_HOST} ^(?<!main1|main2|main3).+\.example\.com$ [NC]
RewriteRule ^robots\.txt$ /robots_sub.txt [L]
因此它应该是:
123.example.com - match
abc.example.com - match
main1.example.com - exclusion
zyx.example.com - match
main2.example.com - exclusion
main3.example.com - exclusion
sub.example.com - match
1条答案
按热度按时间siv3szwd1#
此处使用负 * 先行*,而不是**负 * 后行*******。例如:
只有完全相等
main1
、main2
或main3
的子网域会被排除。允许有部分相符的子网域(例如abcmain1
或main1xyz
)。或者,使用单独的 condition。例如:
第一个 condition 中 CondPattern 上的
!
前缀会否定表达式,因此当表达式不匹配时(即,当Host
头没有以main1.
、main2.
或main3.
开头时),表达式成功。第二个 condition 则确认它是正在请求的子域,而不是域顶点。*****在尝试以这种方式使用 negative lookbehind 时,您尝试Assert字符串
main1
(或main2
或main3
)不存在 * 之前 * 的字符串开始(即,在Host
报头 * 之前 *),这在该上下文中是不可能的,所以总是会成功的。为了使用否定的lookbehind,你需要首先匹配指定字符串可以在其之前的内容。例如:但这比上面使用的 * 负前瞻 * 效率低。