2015-01-11 1 views
0

htaccess 파일에 코드 집합이 있습니다. 목표는 누군가가 wp-login.php 파일에 액세스 할 때 사용자 인증을 요구하는 것입니다. 그러나 쿼리 문자열 "action = postpass"가 사용되면 인증을 비활성화 할 수있는 유연성이 필요합니다.쿼리 문자열 인증 htaccess apache

그래서 예를 들어, 내가 사용하는 경우 입력 : 는 http://domain.com/wp-login.php - 인증 상자가 http://domain.com/wp-login.php?action=postpass 표시 - 없음 인증 상자가 나타납니다.

아파치는 mod_rewrite 앞에 mod_auth 모듈을 실행 한 것처럼 보입니다. 따라서 사용자가 wp-login.php를 호출하는 한 인증 상자가 나타납니다.

<Files wp-login.php> 
RewriteEngine on 
RewriteCond %{HTTP_HOST} (.*)?(domain.com) [NC] 
RewriteCond %{REQUEST_URI} ^/?wp-login\.php [NC] 
RewriteCond %{QUERY_STRING} action=postpass [NC] 
RewriteRule ^(.*)$ - [env=NoAuth,L] 

AuthUserFile "/home/passwd" 
AuthType Basic 
AuthName "Protected Area" 
Order Deny,Allow 
Satisfy any 
Deny from all 
Require valid-user 
Allow from env=NoAuth 
</Files> 

답변

0

이러한 도구를 사용하여 원하는 것을 쉽게 수행 할 수 없습니다. 죄송합니다.

.htaccess의 주문 방법에 관계없이 인증 규칙이 다시 쓰기 규칙보다 먼저 처리되므로 수행중인 작업이 작동하지 않습니다. 이것은 반 직관적이다. 간단한 예를 살펴 보겠습니다.

페이지가로드되면 인증 규칙이 먼저 처리됩니다. 그 당시 RewriteRule은 아직 평가되지 않았습니다. 따라서 NoAuth이 설정되지 않았습니다. 따라서 Allow from env=NoAuth은 다른 사람을 초대 할 수 없습니다. 인증 규칙을 처리 한 후 URL이 다시 쓰여지고 (귀하의 경우에는 변경되지 않지만 상관 없음) NoAuth이 정의되어 있지만 액세스 규칙은 다시 평가되지 않습니다. 그것은 부적당하다.

인증을 위해 QUERY_STRING 데이터를 가져 오는 좋은 방법은 없습니다. 그것은 뾰족하지 만, SetEnvIf 일할 수 있습니다. RewriteRule을 사용하여 특정 QUERY_STRING으로 요청을 다시 작성하고 URI에 주목할만한 것을 넣은 다음 두 번째 SetEnvIf을 추가하여 해당 URI를 확인할 수 있습니다. SetEnvIf 만 쿼리 문자열에 액세스 할 수 있다면이 단계는 한 단계 일 수는 있지만 둘 다 불가능합니다.

관련 문제