gpt4 book ai didi

php - 如何阻止特定网站浏览器代理?

转载 作者:行者123 更新时间:2023-12-02 00:34:27 25 4
gpt4 key购买 nike

最近我遇到了数据挖掘机器人的一些问题,它每天在一天中的特定时间从我的网站提取数据。这不仅会浪费我的带宽,还会给我的谷歌分析提供错误的数据。

他们通常使用 amazonaws IP 进入,但最近他们已切换到其他主机。

保持不变的是它们使用相同的用户代理。有没有办法阻止使用用户代理?这是因为我已经尝试过但失败了。希望我能从中得到启发。

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu HeadlessChrome HeadlessChrome Safari/537.36
RewriteRule .* - [R=503,L]

更新:这是我更新的 .htaac​​ess 仅供将来引用,如果它有助于社区了解它的外观。谢谢怀特先生

<LocationMatch .*>
<IfModule mod_security2.c>
SecRuleRemoveById 211170
SecRuleRemoveById 211180
</IfModule>
</LocationMatch>


Options +FollowSymlinks

Options -Indexes

<FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))">
Require all denied
</FilesMatch>

# SEO URL Settings
RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} "=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu HeadlessChrome HeadlessChrome Safari/537.36"
RewriteRule .* - [F]

RewriteBase /
RewriteRule ^sitemap.xml$ index.php?route=extension/feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=extension/feed/google_base [L]
RewriteRule ^system/download/(.*) index.php?route=error/not_found [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

<Files 403.shtml>
order allow,deny
allow from all
</Files>

最佳答案

RewriteCond %{HTTP_USER_AGENT} Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu HeadlessChrome HeadlessChrome Safari/537.36

空格是 Apache 配置文件中的分隔符。因此,您可能会遇到有关无效标志 的错误(如果您检查错误日志 - 浏览器可能只会报告 500 错误)。您要么需要反斜杠转义用户代理字符串中的空格,要么将整个用户代理(即 CondPattern - RewriteCond 指令的第二个参数)包含在 double 中引号。另请注意,默认情况下这是一个正则表达式,因此任何特殊/元正则表达式字符也需要转义(包括 .()).

例如,请尝试以下操作:

RewriteCond %{HTTP_USER_AGENT} "^Mozilla/5\.0 \(X11; Linux x86_64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Ubuntu HeadlessChrome HeadlessChrome Safari/537\.36$"
RewriteRule .* - [F]

这将返回 403 Forbidden 而不是 503 Service Unavailable(这实际上是一个临时状态)。

或者,要执行字典字符串比较(精确匹配),而不是正则表达式,您可以在 CondPattern 上使用 = 前缀运算符。例如:

RewriteCond %{HTTP_USER_AGENT} "=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu HeadlessChrome HeadlessChrome Safari/537.36"

CondPattern 现在被视为普通字符串(不是正则表达式),因此无需转义特殊字符。

不用说,这应该放在 .htaccess 文件的顶部 - 连同任何其他阻塞指令。


更新:

如果 mod_rewrite 指令被覆盖(可能来自子目录中的 .htaccess 文件),那么您可以结合使用 mod_setenvif 和 mod_authz_core (Apache 2.4+),例如:

BrowserMatch "^Mozilla/5\.0 \(X11; Linux x86_64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Ubuntu HeadlessChrome HeadlessChrome Safari/537\.36$" block_it
<RequireAll>
Require all granted
Require not env block_it
</RequireAll>

如上所述,这是 Apache 2.4+ 语法。

关于php - 如何阻止特定网站浏览器代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50288374/

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