Dot-Htaccess
htaccess 預設拒絕父級,允許單個正則表達式虛擬子路徑
我想預設拒絕所有匿名使用者,但允許匿名使用者使用特定的虛擬路徑;虛擬路徑由 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
那麼這將按預期工作,僅拒絕指定的路由問題
如何允許匿名訪問者訪問我的虛擬路線,同時讓其他所有內容都受到密碼保護?
由於虛擬路徑(由 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}
後者將對所有內容開放。
如果請求的 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)。