[apache] htaccess는 기본 인증에서 하나의 URL을 제외합니다.

일반 htaccess 기본 인증 보호에서 하나의 Url (또는 더 나은 하나의 접두사)을 제외해야합니다. /callbacks/myBank또는 같은 /callbacks/.*
일을 수행하는 방법에 대한 힌트가 있습니까?

내가 찾고 있지 않은 것은 파일을 제외하는 방법입니다. 이것은 url이어야합니다 (이는 PHP 프레임 워크를 기반으로하는 솔루션이며 모든 URL은로 리디렉션 mod_rewrite됩니다 index.php). 따라서이 URL에는 파일이 없습니다. 아무것도.

이러한 URL 중 일부는 다른 서비스의 콜백 일 뿐이며 (IP를 알 수 없으므로 IP를 기준으로 제외 할 수 없음) 사용자 / 암호를 입력하라는 메시지가 표시되지 않습니다.

현재 정의는 다음과 같이 간단합니다.

AuthName "Please login."
AuthGroupFile /dev/null
AuthType Basic
AuthUserFile /xxx/.htpasswd
require valid-user



답변

Apache 2.4를 사용 SetEnvIf중이고 Require지시문이 표현식을 직접 해석 할 수 있으므로 mod_rewrite 해결 방법이 더 이상 필요하지 않은 경우 :

AuthType Basic
AuthName "Please login."
AuthUserFile "/xxx/.htpasswd"

Require expr %{REQUEST_URI} =~ m#^/callbacks/.*#
Require valid-user

아파치 2.4 취급 Require하는 지시 하지 별로 그룹화 <RequireAll>그들이에있는 것처럼 <RequireAny>에 “또는”문으로, 작동합니다. 다음은 요청 URI와 쿼리 문자열을 함께 일치시키고 유효한 사용자를 요구하는 것을 보여주는 더 복잡한 예입니다.

AuthType Basic
AuthName "Please login."
AuthUserFile "/xxx/.htpasswd"

<RequireAny>
    <RequireAll>
        # I'm using the alternate matching form here so I don't have
        # to escape the /'s in the URL.
        Require expr %{REQUEST_URI} =~ m#^/callbacks/.*#

        # You can also match on the query string, which is more
        # convenient than SetEnvIf.
        #Require expr %{QUERY_STRING} = 'secret_var=42'
    </RequireAll>

    Require valid-user
</RequireAny>

이 예에서는에 대한 액세스를 허용 /callbacks/foo?secret_var=42하지만에 대한 사용자 이름과 비밀번호가 필요 /callbacks/foo합니다.

를 사용하지 않는 한 <RequireAll>Apache는 Require 순서대로 각각 일치를 시도 하므로 먼저 허용 할 조건을 생각하십시오.

Require지시문에 대한 참조 는 https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require입니다.

그리고 expression 참조는 여기에 있습니다 : https://httpd.apache.org/docs/2.4/expr.html


답변

SetEnvIf를 사용 하면 요청이 일부 경로로 시작될 때 변수를 생성 한 다음 Satisfy Any지시문을 사용하여 로그인하지 않아도됩니다.

# set an environtment variable "noauth" if the request starts with "/callbacks/"
SetEnvIf Request_URI ^/callbacks/ noauth=1

# the auth block
AuthName "Please login."
AuthGroupFile /dev/null
AuthType Basic
AuthUserFile /xxx/.htpasswd

# Here is where we allow/deny
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=noauth

허용 / 거부 지시문은 유효한 사용자 (성공적인 BASIC 인증 로그인)가 있거나 변수가 설정된 경우를 제외하고 EVERYONE 에 대한 액세스를 거부한다고 말합니다 .noauth


답변

이 솔루션은 매우 잘 작동하며 통과하려는 화이트리스트를 정의하기 만하면됩니다.

SetEnvIfNoCase Request_URI "^/status\.php" noauth

AuthType Basic
AuthName "Identify yourself"
AuthUserFile /path/to/.htpasswd
Require valid-user

Order Deny,Allow
Deny from all
Allow from env=noauth

Satisfy any


답변

나는 다른 해결책을 시도했지만 이것이 나를 위해 일한 것입니다. 다른 사람들에게 도움이되기를 바랍니다.

# Auth stuff
AuthName "Authorized personnel only."
AuthType Basic
AuthUserFile /path/to/your/htpasswd/file

SetEnvIf Request_URI "^/index.php/api/*" allow
Order allow,deny
Require valid-user
Allow from env=allow
Deny from env=!allow
Satisfy any

이렇게하면 API URL과 다음 URL 문자열이 허용됩니다. /index.php/api/ 로그인 할 필요없이 이 열리고 다른 것은 로그인하라는 메시지가 표시됩니다.

예:

mywebsite.com/index.php/api로그인 메시지없이 열림 로그인 메시지없이
mywebsite.com/index.php/api/soap/?wsdl=1열림
mywebsite.com먼저 로그인 메시지가 표시됨


답변

<location />
        SetEnvIf Request_URI "/callback/.*" REDIRECT_noauth=1

        AuthType Basic
        AuthName "Restricted Files"
        AuthUserFile /etc/httpd/passwords/passwords
        Order Deny,Allow
        Satisfy any
        Deny from all
        Allow from env=REDIRECT_noauth
        Require user yournickname
</location>


답변

보호하는 영역에 WordPress와 같은 모든 것을 제어하는 ​​모 놀리 식 PHP 스크립트가있는 경우 다른 접근 방식이 이와 같이 작동합니다. 다른 디렉토리에서 인증을 설정하십시오. ‘/’경로에 쿠키를 설정하는 index.php를 거기에 넣으십시오. 그런 다음 (예를 들어) WordPress에서 쿠키를 확인하되 $ _SERVER [ ‘REQUEST_URI’]가 제외 된 URL인지 확인을 건너 뜁니다.

공유 호스팅 플랫폼에서 RewriteRule은 “Satisfy any”와 함께 작동하는 환경 변수를 설정할 수 없습니다.

어떤 접근 방식을 사용하든 보호중인 페이지에 페이지 자체가 없을 때 인증 요청을 트리거하는 이미지, 스타일 시트 등이 포함되어 있지 않은지 확인하십시오.


답변

루트 htaccess 파일에 아래 코드를 추가하고 관리자 URL, .htpasswd 파일 페이지를 변경하는 것을 잊지 마십시오.

<Files "admin.php">
        AuthName "Cron auth"
        AuthUserFile E:\wamp\www\mg\.htpasswd
        AuthType basic
        Require valid-user
    </Files>

루트 폴더에 .htpasswd 파일을 만들고 아래에 사용자 이름과 암호를 추가합니다 (기본 사용자 이름 : admin 및 암호 : admin123 설정).

admin:$apr1$8.nTvE4f$UirPOK.PQqqfghwANLY47.

여전히 문제가 발생하면 알려주세요.