htaccess 조건문
-
29-09-2020 - |
문제
내 라이브 사이트에 htpasswd 인증을 설정했는데 훌륭하게 작동하지만 개발 환경에서 작업할 때 비밀번호를 묻는 것을 원하지 않습니다.
내 httpd.conf 파일에는 다음이 있습니다.
SetEnv APP_ENV "development"
내 .htaccess
내가 가지고 있는 파일:
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /dev/null
require valid-user
htppasswd 항목 주위에 조건문을 두는 방법이 있는지 궁금합니다. APP_ENV
~이다 development
비밀번호를 묻는 메시지가 표시되지 않습니다.
이것이 가능한가?
해결책
할 수있는 경우, Apache 2.4 (또는 최신 2.3)로 업그레이드하는 것에 대해 생각해야합니다.베타 빌드 2.4 이후 아직 릴리스되지 않았습니다.)
사용할 수있는 새로운 기능 중 하나는 권한있는 컨테이너 - 훨씬 간단하게 만드는 것입니다. 요구 사항 지시문을 사용하여 액세스 요구 사항을 정의하십시오.
다음과 같이 종료해야합니다 :
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /path/to/file/groups
SetEnv APP_ENV "development"
<RequireAll>
<RequireAny>
<RequireAll>
#main requirements
Require group user
#other conditions if needed for non-dev/non-local
</RequireAll>
<RequireAll>
#allow direct if development
Require env APP_ENV development
</RequireAll>
<RequireAll>
<RequireAny>
#allow loopback and local network
Require ip 127.0.0.1
Require ip 10.2
</RequireAny>
</RequireAll>
<RequireAny>
#other conditions if needed for everyone
<RequireNone>
#blacklist
</RequireNone>
</RequireAll>
. 다른 팁
env 변수가있는 조건부 블록이 mod_macro 모듈을 사용하는 경우 빌드 방식 중 하나입니다. 이전에 이전에 예제를 만들었습니다 여기 .
이 특별한 경우가 VirtualHost 파일 앞에있는 경우 (VirtualHost 정의 이전)
<Macro ConditionalBlockMacroSecurity_production>
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /dev/null
require valid-user
</Macro>
<Macro ConditionalBlockMacroSecurity_development >
<IfModule mod_headers.c>
Header set MyHeader "Hello this is DEVELOPMENT envirronment. It took %D microseconds for Apache to serve this request."
</IfModule>
</Macro>
.
및 VirtualHost 내부 :
Use ConditionalBlockMacroSecurity_${APP_ENV}
.
HTPassword 파일의 경로를 매크로의 매개 변수로 설정할 수도 있습니다.
이 솔루션의 단점은 프로덕션 서버에 mod_macro를 설치해야한다는 것입니다. 일반적으로 설치된 모듈이 아니므로 프로덕션 Env의 일부 제어가 필요합니다. 반대편에서 간단한 해결책은 환경에 따라 여러 버전의 VirtualHosts를 사용하고 AUTH 섹션에 몇 가지 주석을 추가하는 것입니다. 그러나 일반적인 솔루션을 검색하는 경우 재발원적인 문제라는 것을 의미하며,이 경우 MOD_MACRO는 Apache 구성이 단일 매크로가 될 때까지 Apache 경험을 대문자로 대문자로 대문자로 활용할 수있는 매우 전문적인 방법이 될 수 있습니다. 매개 변수를 사용하여 많은 다른 매크로를 호출합니다.
Apache Config의 조건은 구성이 [RE]로드 된 경우에만 한 번만 작동합니다.
내가 할 일은 동일한 루트 디렉토리로 두 번째 VirtualHost를 생성하고 IP 주소를 기반으로 Deny / 허용을 사용하여 액세스를 제어하는 것입니다.
다음을 추가하세요.
Require valid-user
Allow from <dev IP>
Satisfy Any
이를 위해서는 다음이 필요합니다. Require valid-user
또는 Allow from <dev IP>
적용됩니다.
.htaccess
파일에서 다음과 같은 ifdefine 지시문 내의 블록을 중첩 할 수 있습니다.
<IfDefine PROD>
bla bla bla
</IfDefine>
.
Apache를 시작할 때 -D PROD
를 인수로 전달해야합니다.이 섹션은 prod가 정의 된 경우에만 실행됩니다.Ubuntu에서는 예를 들어 /etc/apache2/envvars
를 편집하고 끝에이 행을 추가 할 수 있습니다.
export APACHE_ARGUMENTS="-D PROD"
.
개발 환경이 아닌 경우에만 <IfDefine !DEV>
와 같이 실행 한 다음 해당 환경에서 -d dev를 통과 한 다음 envvars를 편집하지 않고도 프로덕션 사이트를 남겨 둘 수 있습니다.
사용자의 필요에 맞게 이에 따라 수정하십시오!