我有一个网站,如果不输入基本身份验证凭据,任何人都不得进入。
但是,我需要每个人都可以访问媒体文件夹,因为我们正在使用创建 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)
将 .htaccess 文件放在带有 .htaccess 的媒体文件夹中
AuthType None
。这本来可行,除非
SetEnvIf
指令中的正则表达式错误,因此media
在请求时未设置env var/media/someimage.jpg
。您在*
量词之前缺少一个点,即。^/media/.*
. 但是,您可以完全删除尾随*
,即。^/media/
,这实际上是相同的(并且更有效)。该
Deny from env=!media
指令是多余的。因此,以下应该有效:
但是,这是使用已弃用的 Apache 2.2 指令。在 Apache 2.4 上,您可以改为执行以下操作:
默认容器是
<RequireAny>
- 所以你不需要包含它。尽管您可以根据需要明确表示:或者,您可以将整个授权块包含在
<If>
表达式中。例如:该运算符
!~
是一个否定的正则表达式匹配。