我有一个网站,没有输入基本身份验证凭据,任何人都不得进入。
但是,我需要每个人都可以访问媒体文件夹,因为我们使用的是创建 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