.htaccess Разрешить все от конкретного агента пользователя
У меня есть веб-сайт, который я разрабатываю, который также будет загружен в веб-приложение. У меня есть следующий код в моем файле .htaccess
, чтобы предотвратить доступ от ANYONE, который не находится на моем разрешенном 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
. Помощь?
UPDATE
Я нашел код ниже, чтобы блокировать определенные пользовательские агенты... Вместо этого я хотел бы сказать "if NOT myuseragent
, а затем заблокировать".
<IfModule mod_rewrite.c>
SetEnvIfNoCase ^User-Agent$ .*(libwww-perl|aesop_com_spiderman) HTTP_SAFE_BADBOT
Deny from env=HTTP_SAFE_BADBOT
</ifModule>
Ответы
Ответ 1
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
Ответ 2
Я просто хочу разрешить ОДИН КОНКРЕТНЫЙ пользовательский агент, а не пытаться заблокировать все
Здесь моя конфигурация позволяет только wget:
SetEnvIf User-Agent .*Wget* wget
Order deny,allow
Deny from all
Allow from env=wget
Ответ 3
Allow from
и Rewrite*
являются директивами двух разных модулей Apache.
Первый - mod_authz_host
, а другой - mod_rewrite
.
Вы можете использовать mod_rewrite
, чтобы сделать то, что вы хотите:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !=myuseragent
RewriteRule .* - [F,L]
Ответ 4
Если вы не хотите использовать 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>
Ответ 5
Я просто хочу разрешить ОДИН КОНКРЕТНЫЙ пользовательский агент, а не пытаться заблокировать все
Привет
Что вам нужно учитывать, так это то, что некоторые боты (особенно "более крупные" более известные) будут использовать несколько пользовательских агентов для доступа к вашему сайту.
Например, 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.
То же самое касается Yahoo и других.
Только на этой неделе наша компания (Incapsula) запустила Botopedia.org - справочник ботов сообщества-источников. Он на 100% свободен и открыт для всех, и вы можете использовать его, чтобы найти полный список пользовательских агентов для всех ботов, которые вы хотите разрешить.
При необходимости он также имеет функцию обратного IP-адреса для проверки ботов, поскольку, как показало наше недавнее исследование посещений Fake Googlebot, некоторые спамеры и даже кибер-атакующие будут использовать законные бот-подписи, чтобы облегчить им путь на ваш сайт.
Надеюсь, что это поможет.