일반 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입니다.
그리고 expr
ession 참조는 여기에 있습니다 : 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.
여전히 문제가 발생하면 알려주세요.