我想默认拒绝所有匿名用户,但允许匿名用户使用特定的虚拟路径;虚拟路径由 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
问题
上面的代码拒绝所有用户并要求提供凭据。但是,如果我将 global 切换到Allow from All
并且If
toDeny from All
那么这将按预期工作,仅拒绝指定的路由
问题
如何允许匿名访问者访问我的虚拟路线,同时让其他所有内容都受到密码保护?
如果请求的 URL 路径不是您想要允许公共访问的 URL 路径,您只需要请求身份验证。否则只需允许访问。
您还在似乎是 Apache 2.4 系统上混合了 Apache 2.2 身份验证指令。
请尝试以下方法:
上面检查请求的 URL 是否未启动
/this/urlpath/is/public/
(您在示例中缺少字符串开头的锚点^
),如果没有,则仅提示进行身份验证。然后默认操作是允许访问(对于以该 URL 路径开头的任何 URL)。由于虚拟路径(由 wordpress 创建)的性质,我不得不
THE_REQUEST
改用:wordpress 重定向使用
wordpress/index.php
所以使用REQUEST_URI
不工作,因为 uri 总是/path/to/wordpress/index.php
使 my if 语句无用。笔记
如果您需要支持 PUT 或其他,则必须将其添加进去。
[A-Z]{3}
或者[A-Z]{3-6}
后者将对所有内容开放。