Dot-Htaccess

htaccess 預設拒絕父級,允許單個正則表達式虛擬子路徑

  • July 20, 2019

我想預設拒絕所有匿名使用者,但允許匿名使用者使用特定的虛擬路徑;虛擬路徑由 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並且IftoDeny 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)。

引用自:https://serverfault.com/questions/975973