2013-07-03 2 views
1

내 .htaccess 파일에 대한 anti-hotlink 명령을 작성해야하지만 이 특히 모든 도메인 이름과 관련이 없습니다. 지금까지 내가 다른 사이트에서 발견 한 바가 있지만, 왜 작동하지 않는지 정확히 알지 못합니다. 누구든지 문제를 발견 할 수 있습니까?htaccess와 특정 도메인 코드를 사용하여 hotlinking을 중지하십시오.

# Stop hotlinking. 
#------------------------------ 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} ^https?://([^/]+)/ [NC] 
# Note the # is just used as a boundary. It could be any character that isn't used in domain-names. 
RewriteCond %1#%{HTTP_HOST} !^(.+)#\1$ 
RewriteRule \.(bmp|gif|jpe?g|png|swf)$ - [F,L,NC] 
+0

참고 : 위의 코드는 작동하지 않는 다른 Stackoverflow 게시/응답을 기반으로합니다. [링크] (http://stackoverflow.com/questions/12242438/how-to-generic-htaccess-to-prevent-hotlink) – Vince

+0

그게 나를 위해 작동하면 빈 htaccess, 어떤 hotlinked 이미지에 넣어 다시 403 온다 같은 사이트의 페이지에서 볼 수있는 모든 이미지가 200으로 돌아옵니다. –

+0

@jon 안녕하세요. 아래에서 몇 가지 이유로 다시 작업하기 시작했습니다. 나는 SHIFT + Reload 버튼을 사용하여 페이지를 새로 고칠 때 단순히 캐시를 지우지 않을 브라우저에 의해 난처한 것으로 생각된다. 그럼에도 불구하고이 코드의 작동 방식을 정확히 이해하고 Ravi가 훌륭한 작업을 수행했음을 이해하기 위해 조금 더 많은 도움이 필요했습니다. – Vince

답변

1

시도해보십시오. 참조 자 또는 대상 URL의 하나가 최고의 www.

편집이있는 경우

RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} ^https?://(www\.)?([^/]+)/.*$ [NC] 
RewriteCond %2#%{HTTP_HOST} !^(.+)#(www\.)?\1$ [NC] 
RewriteRule \.(bmp|gif|jpe?g|png|swf)$ - [F,L,NC] 

도 작동합니다 : (어떻게합니까이 % 일 일?)

%n 참조합니다 n (번째) 브라켓 일치 내용 : 마지막으로 일치하는 다시 쓰기 조건.

그래서,이 경우

  • %1 = 하나 www. 또는 "" 빈 (이것은 선택 사항이기 때문에, 그렇게 ()?을 사용)
  • %2 = yourdomain.com

(항상 www없이) 이제 다시 쓰기 조건이 실제로 일치하려고 시도합니다

yourdomain.com#stealer.com OR yourdomain.com#www.stealer.com 

^(.+)#(www\.)?\1$을 의미하고, 이것은 을 의미하며, # 앞에는 모든 것이 있고, 다음에 www.이 뒤 따른다. 그 다음에 \1이 첫 번째 브라켓의 일치하는 콘텐츠 (이 정규식 내에서, 다시 쓰기 조건이 아님) 즉 정확히 # 이전의 동일한 내용입니다.

따라서 yourdomain.com이 통과하는 동안 stealer.com은 정규식을 실패합니다. 하지만, 우리는 !으로 규칙을 무효화 했으므로; stealer.com은 조건을 통과하므로 핫 링크 스톱퍼 규칙이 적용됩니다.

+0

'RewriteCond'의 패턴 매개 변수에서'% 2'을 사용할 수 없습니다 –

+0

@JonLin Ah, 맞습니다. 갑자기 OP의 상태가 나에게 많은 의미를 갖습니다. 감사. –

+0

@Ravi 이제 나는 정말로 혼란 스럽다. 갑자기 내 첫 번째 예제가 다시 작동하고, 마지막 편집을 한 후에 코드의 제안이 제 질문 코드와 거의 똑같이 보입니다. 구체적인 개선 사항과 필요한 이유를 지적 할 수 있습니까? 나는 3 호선이 실제로 어떻게 작동하는지 혼란 스럽다.'% 2 # % {HTTP_HOST} '는 실제로 어떻게 작동합니까? – Vince