2012-07-11 2 views
3

내 도메인에 htaccess 설정이 있지만 특정 URL에 htpasswd 보호를 설정하지 않길 바랍니다. 해당 URL은 다시 작성된 URL이며 실제 URL과 연결되어 있지 않습니다.htpasswd를 제외한 모든 URL에 htpasswd를 적용 할 수 있습니까?

루트 htaccess를 사용하여 htpasswd가 특정 하나의 URL을 제외한 전체 사이트를 보호 할 수있는 방법이 있습니까? (나를 위해 작동하지 않습니다 존 린의 제안을 포함하여 내 코드)

편집 :

RewriteCond %{SERVER_NAME} =subdomain.example.com 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php/$1 [L] 
SetEnvIf Request_URI "^/messenger/parse" NOPASSWD=true 
AuthUserFile /xxx/xxx/xxx/xxxxxx/subdomain.example.com/.htpasswd 
AuthName "Staging Server" 
AuthType Basic 
Order Deny,Allow 
Satisfy any 
Deny from all 
Require valid-user 
Allow from env=NOPASSWD 

답변

3

당신은 설정 SetEnvIf 같은 것이 주어진 요청 URI에 대한 환경 변수를 설정할 수 있습니다. 그런 다음 인증 정의에서 Satisfy AnyAllow from env 지시문을 사용하여 인증을 통해 또는 환경 변수가 존재하는지 (특정 URI에만 설정 됨) 액세스 권한을 부여 할 수 있음을 Apache에 알릴 수 있습니다. 예 :

# set the NOPASSWD variable if the request is for a specific URI 
SetEnvIf Request_URI "^/specific/uri/nopasswd/$" NOPASSWD=true 

# Auth directives 
AuthUserFile /var/www/htpasswd 
AuthName "Password Protected" 
AuthType Basic 
Order Deny,Allow 
# Any requirment satisfies 
Satisfy any 
# Deny all requests 
Deny from all 
# except if user is authenticated 
Require valid-user 
# or if NOPASSWD is set 
Allow from env=NOPASSWD 
+0

고마워요! 이것은 나에게 의미가 있으며 구현을 시도했지만 htpasswd 로그인 상자는 보호되지 않는 URL로 이동할 때 계속 나타납니다. 위의 내 원래 질문을 내 코드 (내 제안 구현 포함)로 편집했습니다. –

+0

URI를 다시 쓰기 전에 모든 것을'/ index.php /'로 재 작성하면'SetEnvIf'가 일치하지 않을 것입니다. –

+0

결코 나 자신을 위해이 일을 얻을 수 없습니다. – ficuscr

관련 문제