2009-03-11 3 views

답변

2

이 경우 mod_rewrite를 사용합니다. 이미지 등의 경우 다음 표준이 포함됩니다.

RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^https?://myhostname\.com/.*$ [NC] 
RewriteRule \.(gif|jpe?g|png|js|css)$ - [F] 

마지막 규칙의 확장 목록에 "inc"를 추가 할 수 있습니다.

그러나 특정 파일 형식에 대한 액세스를 방지하기위한

내가 좋아하는 뭔가를 선호 :

RewriteCond %{THE_REQUEST} ^\w+\ /include/ [OR] 
RewriteCond %{THE_REQUEST} \.php\ HTTP/ 
RewriteRule ^.*$ - [R=404,L] 

이 두 가지를 수행합니다

  1. 첫 번째 규칙은 외부 요청하지만 당신의/액세스 include 디렉토리 제외를 여전히 그들을 포함/요구할 수있다. 및
  2. 두 번째 규칙은 .php로 끝나는 파일 이름에 대한 액세스를 제한합니다. .inc 파일에도 똑같은 것을 사용할 수 있습니다.

두 경우 모두 아파치가 404 오류 (파일을 찾을 수 없음)를 제공합니다. 일반적으로 뭔가가 존재하지 않는다는 것을 말하는 것이 낫습니다 (사람들이보고 싶지는 않습니다). 거기에 있다고 말하지 만 액세스 할 수는 없습니다. 그러나 그것은 단지 개인적인 견해 일뿐입니다.

왜 나는 .php 파일을 직접 액세스로 제한하겠습니까 : mod_rewrite를 사용하여 "멋진"URL을 만듭니다. 대신에 :

/account/order.php 

그건 :

/account/order 

이렇게 많은 이유가 있습니다. 미학은 하나입니다. SEO는 또 다른 것입니다 (/account/order.php?item=123 대신/account/order/123이있는 경우).

+0

당신이 보호하려고하는지에 따라, 대신 그렇지 거기, 작동 또는 허니팟 사람들을 리드하지 않는 변형을 반환 말. 귀하의 피싱 사이트 복제를 막으려 고하고 있습니까? –

3
<Files ~ "\.inc$"> 
Order allow,deny 
Deny from all 
</Files> 

mod_rewrite가 설치되어 있지 않은 경우 유용합니다.

+0

이것은 일반적인 방법이며, 다시 쓸 필요가 없습니다. ""구.이 이제 ~ 플래그 대신에 사용됩니다. – bobince

0

파일에 대한 액세스를 금지하는 것보다 파일을 위장하는 것을 선호합니다. 따라서 이미 언급 한 cletus와 같이 404 상태 코드 (Apache 2.2 이후)로 응답하는 mod_rewrite 솔루션을 선호합니다. 그러나 바이런 (Byron)이 언급했듯이 mod_rewrite를 사용할 수없는 경우에도 폴백을 사용할 것입니다.

은 그럼 모두 결합하자

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    # .inc files 
    RewriteRule \.inc(/|$) - [L,R=404] 
    # URI paths starting with /include/ 
    RewriteRule ^include/ - [L,R=404] 
</IfModule> 
<IfModule !mod_rewrite.c> 
    <Files ~ "\.inc$"> 
     Order allow,deny 
     Deny from all 
    </Files> 
</IfModule> 
관련 문제