htaccessはデフォルトで親を拒否し、単一の正規表現仮想サブパスを許可します

Jul 19 2019

デフォルトですべての匿名ユーザーを拒否しますが、特定の仮想パスに対して匿名ユーザーを許可します。仮想パスはワードプレスhtaccess + phpによって作成されます

現在の設定

AuthUserFile /var/www/domains/dev/.htpasswd
AuthType Basic
AuthName "Password Required"
Require user jackson dawna
Order Deny,Allow
Deny from All

<If "%{REQUEST_URI} =~ m#/sites/dawna/wordpress/wp-json/wp/v2/.*#">
        Order Allow,Deny
        Allow from All
        Satisfy Any
</If>

Satisfy Any

問題

上記のコードは、すべてのユーザーを拒否し、資格情報を要求します。私はグローバルに切り替える場合はAllow from AllIfDeny from All期待通り、この作品は、必ず指定のルートを否定

質問

他のすべてをパスワードで保護しながら、仮想ルートへの匿名の訪問者を許可するにはどうすればよいですか?

回答

MrWhite Jul 19 2019 at 19:20

要求されたURLパスがパブリックアクセスを許可するURLパスでない場合にのみ、認証を要求する必要があります。それ以外の場合は、単にアクセスを許可します。

また、Apache2.4システムのように見えるものにApache2.2認証ディレクティブを混ぜています。

代わりに、次のようなものを試してください。

<If "%{REQUEST_URI} !~ m#^/this/urlpath/is/public/#">
    AuthUserFile /var/www/domains/dev/.htpasswd
    AuthType Basic
    AuthName "Password Required"
    Require user jackson dawna
</If>

上記は、要求されたURLが開始されないことを確認し/this/urlpath/is/public/^例では文字列の開始アンカーが欠落している)、開始されない場合にのみ認証を要求します。デフォルトのアクションは、アクセスを許可することです(そのURLパスで始まるすべてのURLに対して)。

Jacksonkr Jul 20 2019 at 02:54

(wordpressによって作成された)仮想パスの性質により、THE_REQUEST代わりに次のものを使用する必要がありました。

<If "%{THE_REQUEST} =~ m#^GET /sites/dawna/wordpress/wp-json/#">
        Allow from All
        Satisfy Any
</If>

ワードプレスリダイレクトは、URIが常にmy ifステートメントを役に立たなくしているため、wordpress/index.phpを使用してREQUEST_URIも機能しませんでした/path/to/wordpress/index.php

注意

PUTまたはその他をサポートする必要がある場合は、それを追加する必要があります。[A-Z]{3}または[A-Z]{3-6}、後者がすべてに開放される場所です。