Как в .htaccess разрешить доступ только определенным User-Agent

andrey90
На сайте с 02.06.2011
Offline
125
4059

Люди добрые, помогите.

Необходимо, что доступ к папке на сервере был только для определенных User-Agent

Делаю так:


SetEnvIfNoCase User-Agent "^good-agent" yes_ag
Order Allow,Deny
allow from env=yes_ag
deny from all

Но User-Agent: good-agent тоже вылетает на 403 ошибку.

В чем может быть проблема?

https://goo.gl/tJuFX - Заработай на продаже авиабилетов 1 000 000 $ уже сегодня https://goo.gl/y6tpS - Кредиты WebMoney с задолженностью WMC
ПЗ
На сайте с 10.10.2006
Offline
92
#1

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} !good-agent1 [NC]

RewriteCond %{HTTP_USER_AGENT} !good-agent2 [NC]

...

RewriteCond %{HTTP_USER_AGENT} !good-agentN [NC]

RewriteRule .* - [L]

Автомобили в России (http://www.autobb.ru/). Спецтехника BIZ - вся строительная, дорожная, коммунальная техника (http://www.spectehnika.biz/) и другая спецтехника в одном месте.
J
На сайте с 20.02.2014
Offline
120
jkm
#2

Директивы mod_authz_host Allow, Deny срабатывают раньше чем директивы mod_setenvif, так что в одном файле это не работает.

Решить можно переместив директивы mod_setenvif в .htaccess на уровень выше, а остальное оставить.

Перенести в корневой .htaccess


SetEnvIfNoCase User-Agent "^good-agent" yes_ag
andrey90
На сайте с 02.06.2011
Offline
125
#3

Сделал так:

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} !good-agent [NC]

RewriteRule ^(.*)$ - [L]

Но доступ с других User-Agent так же возможен.

То есть функцию не выполняет.

---------- Добавлено 12.02.2015 в 13:27 ----------

jkm:
Директивы mod_authz_host Allow, Deny срабатывают раньше чем директивы mod_setenvif, так что в одном файле это не работает.
Решить можно переместив директивы mod_setenvif в .htaccess на уровень выше, а остальное оставить.
Перенести в корневой .htaccess

SetEnvIfNoCase User-Agent "^good-agent" yes_ag

Так тоже не работает.

J
На сайте с 20.02.2014
Offline
120
jkm
#4

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !good-agent [NC]
RewriteRule ^(.*)$ - [L,F]

Для кода 403 необходим флаг [F] в строке RewriteRule


SetEnvIfNoCase User-Agent "^good-agent" yes_ag

В шаблоне присутствует маркер начала строки ^ может ищете фрагмент в середине строки? Тогда его стоит убрать оставив только "good-agent"

andrey90
На сайте с 02.06.2011
Offline
125
#5

Вот так работает:

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} !(good-agent) [NC]

RewriteRule ^ - [F,L]

Доступ получает только User-Agent: good-agent


Павел Зотов, спасибо, что натолкнули на верную мысль.

---------- Добавлено 12.02.2015 в 13:54 ----------

jkm:
В шаблоне присутствует маркер начала строки ^ может ищете фрагмент в середине строки? Тогда его стоит убрать оставив только "good-agent"

Начало строки именно с good-agent, я попробовал по разному, но почему-то не работает.

ND
На сайте с 09.02.2013
Offline
15
#6

Ваш изначальный код верен, только следует не в том порядке. Так надо:

SetEnvIfNoCase User-Agent "^good-agent" yes_ag

Order Deny, Allow

deny from all

allow from env=yes_ag

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий