1. ホーム
  2. apache

[解決済み] htaccessでBasic Authから1つのurlを除外する

2023-07-20 09:44:58

質問

あるURL(あるいはもっと良いのは1つの接頭辞)を通常のhtaccessのBasic Auth保護から除外する必要があります。次のようなもの /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 と mod_rewrite の回避策はもはや必要ありません。 Require ディレクティブは式を直接解釈することができますので、 回避策は必要ありません。

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

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

Apache 2.4 の処理 Require ディレクティブは ではなく でグループ化された <RequireAll> にあるかのように <RequireAny> これは "or" ステートメントとして動作します。以下は、リクエスト 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