기본 인증을 사용하는 .htaccess가 있습니다. .htpasswd 파일의 경로가 htaccess 파일에 상대적이 아니라 서버 구성에 상대적인 것 같습니다.
따라서 동일한 디렉토리에 .htaccess 및 .htpasswd 파일이 있어도 작동하지 않습니다.
AuthType Basic
AuthName "Private Login"
AuthUserFile .htpasswd
Require valid-user
그러나 절대 경로를 사용하도록 AuthUserFile을 변경하면 작동합니다.
AuthType Basic
AuthName "Private Login"
AuthUserFile "/home/user/public_html/mydir/.htpasswd"
Require valid-user
그러나 나는 다른 지역의 여러 사이트에서 이것을 사용하기 때문에 더 많은 모바일을 선호합니다. 웹을 검색했지만 해결책이 없습니다. 상대 경로 또는 변수를 사용할 수 %{DOCUMENT_ROOT}
있습니까?
답변
AuthUserFile에 대해 상대 경로를 사용할 수 없습니다 .
파일 경로는 사용자 파일의 경로입니다. 절대적이지 않은 경우 (예 : 슬래시로 시작하지 않는 경우)
ServerRoot
.
그 제한을 받아들이고 해결해야합니다.
우리가 사용하고있는 IfDefine
아파치와 함께 명령 줄 매개 변수 :
.htaccess
(개발 및 라이브 시스템 모두에 적합) :
<IfDefine !development>
AuthType Basic
AuthName "Say the secret word"
AuthUserFile /var/www/hostname/.htpasswd
Require valid-user
</IfDefine>
개발 서버 구성 (Debian)
다음에 다음을 추가하십시오 /etc/apache2/envvars
.
export APACHE_ARGUMENTS=-Ddevelopment
나중에 아파치를 다시 시작하면 개발 서버에 있지 않을 때만 암호 프롬프트가 표시됩니다.
물론 개발 서버에 대해 다른 IfDefine을 추가 할 수 있습니다 !
. 블록을 복사하고 .
답변
사람들이 이에 대한 해결책을 찾고있는 경우를 위해 :
<If "req('Host') = 'www.example.com'">
Authtype Basic
AuthName "user and password"
AuthUserFile /var/www/www.example.com/.htpasswd
Require valid-user
</If>
답변
1) .htpasswd
서버 루트 아래에 파일 이있는 것은 안전하지 않은 것으로 간주됩니다 .
2) 문서 는 상대 경로에 대해 이렇게 말하고 있으므로 운이 좋지 않은 것 같습니다.
파일 경로는 사용자 파일의 경로입니다. 절대적이지 않은 경우 (즉, 슬래시로 시작하지 않는 경우) ServerRoot에 상대적인 것으로 처리됩니다 .
3) 환경 변수 사용을 권장하는 답변은 완벽하게 작동하지만 .htaccess
파일에 자리 표시자를 넣거나 코드베이스에 다른 버전을 사용하고 배포 프로세스에서 모두 설정 하도록하는 것이 좋습니다 (예 : 자리 표시 자 교체 또는 이름 바꾸기 / 적절한 파일 이동).
Java 프로젝트에서는 Maven을 사용하여 이러한 유형의 작업을 수행합니다. 예를 들어 PHP 프로젝트에서 배포 된 파일을 환경에 맞게 조정하는 build.sh 및 / 또는 install.sh 셸 스크립트가 있습니다. 이는 코드베이스를 대상 환경의 세부 사항 (즉, 환경 변수 및 구성 매개 변수)에서 분리합니다. 일반적으로 응용 프로그램은 환경에 적응해야합니다. 다른 방법으로 수행하면 환경이 다른 응용 프로그램이나 완전히 관련이없는 시스템 특정 요구 사항을 충족해야하는 경우 문제가 발생할 수 있습니다.
답변
인증 설정을 환경에 넣을 수 있습니다. 처럼:
SetEnvIf HTTP_HOST testsite.local APPLICATION_ENV=development
<IfDefine !APPLICATION_ENV>
Allow from all
AuthType Basic
AuthName "My Testseite - Login"
AuthUserFile /Users/tho/htdocs/wgh_staging/.htpasswd
Require user username
</IfDefine>
인증은 작동하지만 내 환경을 실제로 실행할 수 없습니다.
답변
.htpasswd에는 서버의 절대 루트로부터의 전체 절대 경로가 필요합니다.
echo로 파일의 전체 절대 경로를 얻으십시오 echo $_SERVER['DOCUMENT_ROOT'];
.
여기에 기본 auth .htaccess 스크립트가 있습니다.
AuthType Basic
AuthName "Access to the Hidden Files"
AuthUserFile 'C:/xampp/htdocs/ht/.htpasswd'
Require valid-user
로그인 전
Afetr 로그인
답변
Windows에서 XAMPP를 사용하고 라이브 서버에서 .htaccess 파일을 사용하고 XAMPP 개발 시스템에서 개발하려는 경우 다음이 잘 작동합니다!
1) XAMPP를 새로 설치 한 후 Apache가 서비스로 설치되었는지 확인하십시오.
- XAMPP 제어판을 열고 Apache 모듈 왼쪽에있는 작은 빨간색 “X”를 클릭하면됩니다.
- 그런 다음 Apache를 서비스로 설치할 것인지 묻습니다.
- 그런 다음 녹색 확인 표시로 바뀝니다.
2) Apache가 서비스로 설치되면 새 환경 변수를 플래그로 추가하십시오.
- 먼저 XAMPP 제어판에서 Apache 서비스를 중지하십시오.
- 다음으로 명령 프롬프트를 엽니 다. (DOS를 시뮬레이트하는 작은 검은 창을 알고 있습니다)
- 입력 -D “DEV”-k 설정 : “\ Program 파일 (x 86) \ XAMPP \ 아파치 \ 빈 \ httpd.exe가 C”를 .
- 이렇게하면 나중에 사용할 수있는 환경 변수에 새 DEV 플래그 가 추가 됩니다.
3) Apache 시작
- XAMPP 제어판을 열고 Apache 서비스를 시작하십시오.
4) 다음 정보로 .htaccess 파일을 만듭니다.
<IfDefine DEV>
AuthType Basic
AuthName "Authorized access only!"
AuthUserFile "/sandbox/web/scripts/.htpasswd"
require valid-user
</IfDefine>
<IfDefine !DEV>
AuthType Basic
AuthName "Authorized access only!"
AuthUserFile "/home/arvo/public_html/scripts/.htpasswd"
require valid-user
</IfDefine>
위의 스크립트를 설명하기 위해 여기에 몇 가지 참고 사항이 있습니다.
- 내 AuthUserFile은 내 설정 및 개인 기본 설정을 기반으로합니다.
- 내 웹 페이지가 c : \ sandbox \ web \에 있는 로컬 테스트 개발 상자가 있습니다 . 그 폴더 안에는 암호 파일 .htpasswd 를 포함하는 scripts 라는 폴더 가 있습니다 .
- 첫 번째 항목 IfDefine DEV 가 해당 인스턴스에 사용됩니다. DEV가 설정되면 (위에서 수행 한 작업이며, 대략적인 dev 시스템에서만) 해당 항목을 사용합니다.
- 그리고 라이브 서버를 사용하는 경우 IfDefine! DEV 가 사용됩니다.
5) 다음 정보를 사용하여 암호 파일 (이 경우 .htpasswd)을 만듭니다.
user : $ apr1 $ EPuSBcwO $ / KtqDUttQMNUa5lGXSOzk.
참고할 몇 가지 사항 …
- 암호 파일은 원하는 이름이 될 수 있습니다.
- 보안을 위해 .htpasswd를 사용해야합니다.
- http://www.htaccesstools.com/htpasswd-generator/ 에서 찾은 훌륭한 암호 생성기
- 파일에 해당 이름을 사용해야하는 좋은 설명과 이유는 @ http://www.htaccesstools.com/articles/htpasswd/에 있습니다 .
- 올바른 위치에 암호 파일을 입력했는지 확인하십시오 !!! (4 단계 AuthUserFile 영역 참조)
답변
또는 localhost에서 개발하는 경우 (apache 2.4 이상에만 해당) :
<If "%{REMOTE_ADDR} != '127.0.0.1'">
</If>