
我想預設拒絕所有匿名用戶,但允許匿名用戶使用特定的虛擬路徑;虛擬路徑是由 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}
中,後者將向所有內容開放。