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

問題

上面的程式碼拒絕所有使用者並要求提供憑證。但是,如果我切換全域到和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}中,後者將向所有內容開放。

相關內容