在 HTTP_USER_AGENT 变量中使用时,Apache 2.4 中的正则表达式

在 HTTP_USER_AGENT 变量中使用时,Apache 2.4 中的正则表达式

我需要使用 Apache 2.4 中的一些用户代理。我在 Google 上搜索了很多示例,尝试了无数正则表达式选项,但仍然不起作用:

<If "%{HTTP_USER_AGENT} == '/^.*(Google|bing|Windows|Gecko).*$/'">
Require all granted
</If>

同时,RegExp 本身也可以正常工作(参见https://regexr.com/7lar4)并且它明确指出了我错误的自制 Apache 语法。

这也是我已经尝试过的:

<If "%{HTTP_USER_AGENT} == '^.*(Google|bing|Windows|Gecko).*$'">
Require all granted
</If>

<If "%{HTTP_USER_AGENT} == '~/^.*(Google|bing|Windows|Gecko).*$/'">
Require all granted
</If>

诸如此类。但都不起作用。

请指教!

答案1

又浪费了一个小时后,我可以说正确的语法是:

<FilesMatch ".+\.(?=(doc|docx|pdf|ppt|rtf|xls|xlsx)$)[^\.]+?$">
<If "%{HTTP_USER_AGENT} =~ /^.*(Googlebot|Google-InspectionTool|GoogleOther|GoogleOther|bingbot|YandexBot|YandexImages|YandexMetrika|YandexWebmaster|Baiduspider).*$/">
Require all granted
</If>
</FilesMatch>

此配置部分将允许主要机器人抓取办公文件。

需要 Apache 2.4。

相关内容