[.htaccess] htaccess에서 AuthUserFile과 함께 RELATIVE 경로를 사용하는 방법은 무엇입니까?

기본 인증을 사용하는 .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.

참고할 몇 가지 사항 …


답변

또는 localhost에서 개발하는 경우 (apache 2.4 이상에만 해당) :

<If "%{REMOTE_ADDR} != '127.0.0.1'">
</If>