16

我有一个正在开发的网站,它也将被拉入一个网络应用程序。我的.htaccess文件中有以下代码,以防止不在我允许的 IP 上的任何人访问:

Order deny,allow
Deny from all
AuthName "Restricted Area - Authorization Required" 
AuthUserFile /home/content/html/.htpasswd 
AuthType Basic
Require valid-user
Allow from 12.34.567.89 
Satisfy Any

问题:我想添加一个Allow from规则,该规则还允许特定的 HTTP 用户代理访问该站点。

如果不是用户代理,我发现此代码重定向:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !=myuseragent
RewriteRule ^files/.*$ / [R=302,L]

但我似乎无法弄清楚如何将其变成Allow from规则。帮助?

更新

我发现下面的代码可以阻止特定的用户代理...我想说“如果不是myuseragent,则阻止”。

<IfModule mod_rewrite.c>
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT
</ifModule>
4

6 回答 6

20
SetEnvIfNoCase User-Agent .*google.* search_robot
SetEnvIfNoCase User-Agent .*yahoo.* search_robot
SetEnvIfNoCase User-Agent .*bot.* search_robot
SetEnvIfNoCase User-Agent .*ask.* search_robot

Order Deny,Allow
Deny from All
Allow from env=search_robot

Htaccess SetEnvIf 和 SetEnvIfNoCase 示例

于 2012-08-08T12:46:40.477 回答
7

我只想允许一个特定的用户代理,而不是试图阻止所有

这是我的配置,只允许 wget:

SetEnvIf User-Agent .*Wget* wget

Order deny,allow
Deny from all
Allow from env=wget
于 2013-01-18T17:44:01.577 回答
5

Allow from并且Rewrite*是来自两个不同 Apache 模块的指令。

第一个是mod_authz_host,另一个来自mod_rewrite

你可以mod_rewrite用来做你想做的事:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !=myuseragent
RewriteRule .* - [F,L]
于 2012-08-08T12:48:00.233 回答
2

如果你不想使用 mode_rewrite,在 Apache 2.4 中你可以使用类似这样的东西:

<Location />
                AuthType Basic
                AuthName "Enter Login and Password to Enter"
                AuthUserFile /home/content/html/.htpasswd
                <If "%{HTTP_USER_AGENT} == 'myuseragent'">
                Require all granted
                </If>
                <Else>
                Require valid-user
                Require ip 12.34.567.89
                </Else>
</Location>
于 2015-09-08T14:09:54.913 回答
0

我使用了像 sys0dm1n's answer 这样的版本。

这是我的 .htaccess 文件。它允许 Google 表格访问我服务器上的目录。

AuthType Basic
AuthName "Password Protected Area"
AuthUserFile /var/tools/.htpasswd
<If "%{HTTP_USER_AGENT} == 'Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)'">
Require all granted
</If>
<Else>
Require valid-user
</Else>

转到 apache 文件夹中的 access.log 文件,查看需要允许或阻止的用户代理。

于 2021-08-31T01:49:32.587 回答
-2

我只想允许一个特定的用户代理,而不是试图阻止所有

你好

您需要在这里考虑的是一些机器人(尤其是“更大”更突出的机器人)将使用多个用户代理来访问您的网站。例如,Googlebot(爬虫)可以使用所有这些不同的用户代理:

Googlebot-Image/1.0 
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1;+htt://www.google.com/bot.html)
GoogleProducer 
SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7 (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)
Google-Site-Verification/1.0
Google-Test
Googlebot/2.1 (+http://www.google.com/bot.html) 

我不是在谈论 Google Plus 和 Google 使用的许多其他机器人。

雅虎和其他人也是如此。

就在本周,我们公司 (Incapsula) 推出了Botopedia.org - 一个来自社区的机器人目录。它是 100% 免费且对所有人开放的,您可以使用它来查找您想要允许的所有机器人的完整用户代理列表。

如果需要,它还具有用于 Bot 验证的反向 IP 功能,因为正如我们最近对虚假 Googlebot 访问的研究所表明的那样,一些垃圾邮件发送者甚至网络攻击者会使用合法的 bot 签名来轻松进入您的网站。

希望这可以帮助。

于 2012-08-14T12:43:29.693 回答