2014-07-22 1 views
1

루트 경로를 제외하고 AuthUserFile을 사용하여 내 웹 사이트에 대한 액세스를 제한하려고합니다.Apache SetEnvIf 지시문을 존재하지 않는 파일에만 적용하는 방법은 무엇입니까?

SetEnvIf Request_URI "^/$" allow_access=true 

Order Deny,Allow 
Deny from all 
Allow from env=allow_access 

그러나 robots.txt와 같은 파일도 보호받을 때 문제가 발생했습니다.

다음의 지시문 이 아닙니다.

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{REQUEST_URI} ^/$ 
RewriteRule .* - [E=allow_access] 

Order Deny,Allow 
Deny from all 
Allow from env=allow_access 

홈 페이지 (/) 등의 robots.txt와 favicon.ico의 물리적으로 존재하는 파일을 제외하고 여기에/어떤/경로//에 대한 액세스를 제한 할 수있는 방법이 있습니까?

미리 도움을 청하십시오!

답변

0

이 조금 까다하지만 mod_rewritemod_setenvif 작품이 콤보입니다 :

RewriteEngine on 

# if file or directory doesn't exist then forward to /deny 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .+ /deny [L] 

# set env variable deny_access if URI is /deny 
SetEnvIf Request_URI "^/deny$" deny_access 

# block access if env variable deny_access is set 
Order Allow,Deny 
Allow from all 
Deny from env=deny_access 
+0

안녕! 해결책 주셔서 감사합니다. 그러나, 이것은 내 경우에는 작동하지 않습니다. 문제는 vhost에서 index.php를 쿼리하기 위해 URI를 다시 작성하는 재 작성 규칙이 있다는 것입니다 (사용자에게 친숙한 URL에 대한 일반적인 습관). /와 기존 파일 (예 : robots.txt)에 대한 액세스를 허용해야하지만/any/path/here /에 대한 액세스를 거부해야합니다. 이것은 실제로 까다 롭습니다. 그래서 아파치 전문가들의 도움이 필요합니다. :) – Stanislav

+0

기존 규칙을 게시하여 끝까지 재생산하고 업데이트 된 답변을 제공 할 수 있습니까? – anubhava

+0

(작동하지 않는) 두 번째 블록을 참조하십시오. – Stanislav