.htaccess-从基本身份验证保护中排除文件夹

.htaccess-从基本身份验证保护中排除文件夹

我有一个网站,没有输入基本身份验证凭据,任何人都不得进入。

但是,我需要每个人都可以访问媒体文件夹,因为我们使用的是创建 PDF 的第三方扩展,并且只有在媒体可访问的情况下我们才能对其进行全面测试。

媒体文件夹位于/var/www/company/pub/media

域(www.example.com)指向/var/www/company/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然后我仍然会收到基本身份验证登录提示。

环境:

Apache 2.4.41(Ubuntu)

答案1

# 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/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>

该运算符!~是一个否定的正则表达式匹配。

答案2

将 .htaccess 文件放入媒体文件夹中AuthType None

AuthType None
Require all granted

相关内容