Dot-Htaccess
.htaccess - 從基本身份驗證保護中排除文件夾
我有一個網站,如果不輸入基本身份驗證憑據,任何人都不得進入。
但是,我需要每個人都可以訪問媒體文件夾,因為我們正在使用創建 PDF 的第三方擴展,並且我們只能在媒體可訪問的情況下對其進行全面測試。
媒體文件夾位於
/var/www/company/pub/media
.域 ( www.example.com ) 指向
/var/www/company/pub
,因此pub文件夾是入口點。這是我的 .htaccess 嘗試(
/var/www/company/.htaccess
):RewriteEngine on RewriteCond %{REQUEST_URI} !^/pub/ RewriteCond %{REQUEST_URI} !^/setup/ RewriteCond %{REQUEST_URI} !^/update/ RewriteCond %{REQUEST_URI} !^/dev/ RewriteRule .* /pub/$0 [L] DirectoryIndex index.php AuthType Basic AuthName "Protected" AuthUserFile "/var/www/company/.htpasswd" # Exclude media folder from basic auth SetEnvIf Request_URI "^/media/*" media Order allow,deny Require valid-user Allow from env=media Deny from env=!media Satisfy any
但是如果我嘗試呼叫*http://www.example.com/media/someimage.jpg*那麼我仍然會得到基本的身份驗證登錄提示。
環境:
阿帕奇 2.4.41 (Ubuntu)
# Exclude media folder from basic auth SetEnvIf Request_URI "^/media/*" media Order allow,deny Require valid-user Allow from env=media Deny from env=!media Satisfy any
這本來可行,除非
SetEnvIf
指令中的正則表達式錯誤,因此media
在請求時未設置env var/media/someimage.jpg
。您在*
量詞之前缺少一個點,即。^/media/.*
. 但是,您可以完全刪除尾隨*
,即。^/media/
,這實際上是相同的(並且更有效)。該
Deny from env=!media
指令是多餘的。因此,以下應該有效:
# Exclude media folder from basic auth SetEnvIf Request_URI "^/media/" media Require valid-user Order allow,deny Allow from env=media Satisfy Any
但是,這是使用已棄用的 Apache 2.2 指令。在 Apache 2.4 上,您可以改為執行以下操作:
# Exclude media folder from basic auth SetEnvIf Request_URI "^/media/" media Require valid-user Require env media
預設容器是
<RequireAny>
- 所以你不需要包含它。儘管您可以根據需要明確表示:<RequireAny> Require valid-user Require env media </RequireAny>
或者,您可以將整個授權塊包含在
<If>
表達式中。例如:# Password protect everything except the "/media/" subdirectory <If "%{REQUEST_URI} !~ m#^/media/#"> AuthType Basic AuthName "Protected" AuthUserFile "/var/www/company/.htpasswd" Require valid-user </If>
該運算符
!~
是一個否定的正則表達式匹配。