htaccessはデフォルトで親を拒否し、単一の正規表現仮想サブパスを許可します
デフォルトですべての匿名ユーザーを拒否しますが、特定の仮想パスに対して匿名ユーザーを許可します。仮想パスはワードプレス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 All
とIf
のDeny from All
期待通り、この作品は、必ず指定のルートを否定
質問
他のすべてをパスワードで保護しながら、仮想ルートへの匿名の訪問者を許可するにはどうすればよいですか?
回答
要求された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に対して)。
(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}
、後者がすべてに開放される場所です。