Dot-Htaccess

.htaccess - 從基本身份驗證保護中排除文件夾

  • October 13, 2021

我有一個網站,如果不輸入基本身份驗證憑據,任何人都不得進入。

但是,我需要每個人都可以訪問媒體文件夾,因為我們正在使用創建 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>

該運算符!~是一個否定的正則表達式匹配。

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