2013-01-27 8 views
2

.htaccess를 사용하여 봇/원치 않는 클라이언트를 오류 페이지로 리디렉션하려고합니다. 그러나 모든 연결에 그냥 제공 "한다 RewriteCond을 : 잘못된 플래그 구분 기호"다시 쓰기 Cond - 나쁜 플래그 구분 기호 .htaccess (Apache)

htaccess로 :

RewriteEngine On 
Options +FollowSymlinks 
RewriteBase/
RewriteCond %{HTTP_USER_AGENT} askpeter_bot [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} Jakarta [NC,OR] 
... 
RewriteCond %{HTTP_USER_AGENT} Genieo [NC] 
RewriteRule ^(.*) "http\:\/\/www\.example\.com\/bots\/notallowed.html" [F] 

문제가 될 수 무엇을 어떤 아이디어?


편집 : 지금은
i는 사용자 에이전트

deny from env=block 
SetEnvIfNoCase User-Agent "USER-AGENT" block=yes 

을 차단 거부하지만 난 그냥 빈 페이지를 얻을 수 있기 때문에하고 싶은 방법은 아니다 사용하고 있는데 왜 메시지

+0

이'RewriteRule의 시도 http://www.example.com :. 그 어떤 이유로 작동하지 않는 경우

cat -v .htaccess 

을,이 파이썬을 시도 /bots/notallowed.html [R = 403, L]' –

+0

시도했습니다. 같은 errormessage – chill0r

답변

3

[F] 또는 [R = 403] 플래그를 사용하면 apache는 ErrorDocument을 지정된 코드로 렌더링합니다. 이 같은 ErrorDocument 지정을 사용하여이 설정할 수 :

ErrorDocument 403 /bots/notallowed.html 

귀하의 경우이 방법의 문제는 (403) 코드를 송신하는 경우는 모두 로봇과 인간에 사용될 것입니다. 봇이를 제한하기 위해

는,이 같은 제안 :

올바른 헤더를 보낼 헤더 기능을 사용할 수 notallowed.php에서 다음
RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} askpeter_bot [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} Jakarta [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} Genieo [NC] 
RewriteRule ^(.*)$ /bots/notallowed.php [L] 

:

<?php header("HTTP/1.0 403 Forbidden"); ?> 
Go away, bot. 

하는 경우를 PHP를 사용하지 않고 perl, python, ruby ​​등을 사용할 수 있습니다. 열쇠는이 경우에 아파치에 의존하는 대신 스크립트에서 헤더를 보내는 것입니다.

편집 :

당신이 이미 해봤 때문에, 나는 당신이 당신의 규칙 중 하나 이상에 어떤 종류의 숨겨진 제어 문자가있을 수 있습니다 생각합니다. 당신이 찾는 고양이를 사용할 수 있습니다 *

python -c "f = open('.htaccess', 'r'); f.seek(0); file = f.readlines(); print file" 
+0

이미, 그게 똑같은 문제 -> "잘못된 플래그 구분 기호" – chill0r

+0

이상한, 그것을 게시하기 전에 그것을 테스트하고 괜찮 았어. .htaccess에 다른 규칙이 있습니까? 이 규칙 이외의 모든 것을 주석 처리하면 어떻게됩니까? 어떤 버전의 Apache를 사용하고 있습니까? – bradym

+0

더 많은 bot 사용자 에이전트가 있습니다 (모두 내 질문에있는 것과 같은 형식 임).하지만 그 밖의 것은 없습니다. 나는 아파치/2.2.16 (데비안)을 사용하고있다. (예, mod_rewrite가로드되었습니다.) – chill0r