
デフォルトではすべての匿名ユーザーを拒否しますが、特定の仮想パスに対しては匿名ユーザーを許可します。仮想パスはWordPressの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
、期待どおりに動作します。
質問
他のすべてをパスワードで保護しながら、匿名の訪問者を仮想ルートに許可するにはどうすればよいですか?
答え1
どうやら、要求されたURLパスがないパブリックアクセスを許可する URL パス。それ以外の場合はアクセスを許可するだけです。
また、Apache 2.4 システムと思われるものに Apache 2.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 に対して)。
答え2
仮想パス(WordPress によって作成)の性質上、THE_REQUEST
代わりに以下を使用する必要がありました。
<If "%{THE_REQUEST} =~ m#^GET /sites/dawna/wordpress/wp-json/#">
Allow from All
Satisfy Any
</If>
wordpress リダイレクトは を使用するwordpress/index.php
ので、 の使用はREQUEST_URI
機能しませんでした。これは、 uri が常に/path/to/wordpress/index.php
my if ステートメントを役に立たなくするためです。
注記
PUT やその他のものをサポートする必要がある場合は、それを追加する必要があります。[A-Z]{3}
または、[A-Z]{3-6}
後者はすべてに開かれます。