2012-08-08 13 views
14

Mam stronę, którą rozwijam, która również zostanie wciągnięta do aplikacji internetowej. Mam następujący kod w moim pliku .htaccess aby zapobiec dostęp z każdego, kto nie jest na moim dozwolonym IP:.htaccess Zezwalaj na wszystko od konkretnego agenta użytkownika

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 

PYTANIE: Chciałbym dodać Allow from regułę, która pozwoli także specyficzny agenta użytkownika HTTP dostęp do strony.

Znalazłem ten kod, aby przekierować jeśli nie kliencka:

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

Ale nie wydaje się dowiedzieć się, jak przekształcić reguły Allow from. Wsparcie?

UPDATE

znalazłem poniższy kod, aby zablokować konkretne środki użytkownika ... Chciałbym zamiast jak powiedzieć „jeśli nie myuseragent, a następnie zablokować.”

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

Odpowiedz

14
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 and SetEnvIfNoCase Examples

+0

I fo a także kod, który właśnie wysłałeś na SO ... Po prostu chcę pozwolić JEDEN SPECYFICZNY agent użytkownika, zamiast próbować blokować wszystko (nie chcę ryzykować na brak). Jakieś pomysły? – adamdehaven

+0

@AdamD Poprawiłem swoją odpowiedź. Czy to już nie rozwiązuje twojego problemu? –

+0

@AdamD Słusznie. –

5

Allow from i Rewrite* są dyrektywami z dwóch różnych modułów Apache.

Pierwsza z nich to mod_authz_host, a druga z mod_rewrite.

Można użyć mod_rewrite robić to, co chcesz:

RewriteEngine on 
RewriteCond %{HTTP_USER_AGENT} !=myuseragent 
RewriteRule .* - [F,L] 
+0

Z kodem, który napisałeś, będzie to działać w WSZYSTKICH katalogach? Czy będę musiał umieścić plik '.htaccess' z tym kodem w każdym katalogu? – adamdehaven

+0

@AdamD: będzie działać dla dowolnego adresu URL. – InternetSeriousBusiness

+0

To jest świetne, mogę użyć 'RewriteCond% {HTTP_USER_AGENT}! (Mozilla)' i zezwoli to tylko tym, którzy mają klienta przeglądarki/nie-bota – chiappa

-1

Chcę tylko, aby umożliwić jednego konkretnego agenta użytkownika zamiast próbować blokować wszystkie

Hi

Co musisz wziąć pod uwagę, że niektóre boty (szczególnie "większe", bardziej znaczące) wykorzystają kilka programów klienckich do uzyskania dostępu do Twojej witryny. Na przykład Googlebot (robot) mogą korzystać wszystkie te różne user-agent:

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) 

i I`m wydarzenie nie mówimy o Google Plus i wiele innych botów wykorzystywanych przez Google.

To samo dotyczy Yahoo i innych.

W tym tygodniu nasza firma (Incapsula) uruchomiła Botopedia.org - a Community-Sourced bot directory. Jest w 100% darmowy i otwarty dla wszystkich. Możesz go użyć do znalezienia pełnej listy użytkowników dla wszystkich botów, które chcesz Zezwalać.

Jeśli jest taka potrzeba, ma również funkcję Reverse IP do weryfikacji Botów, ponieważ, jak pokazał nasz recent study of Fake Googlebot visits, niektórzy spamerzy, a nawet cyber-atakujący użyją legalnych sygnatur botów, aby ułatwić sobie przejście do Twojej witryny.

Mam nadzieję, że to pomoże.

7

Chcę tylko, aby umożliwić jednego konkretnego agenta użytkownika zamiast próbować bloku wszystko

Oto mój config, aby umożliwić tylko wget:

SetEnvIf User-Agent .*Wget* wget 

Order deny,allow 
Deny from all 
Allow from env=wget 
1

Jeśli nie chcesz użyj mode_rewrite, z Apache 2.4 możesz użyć czegoś podobnego do tego:

<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>