php - 如何配置 .htaccess 规则以允许对特定图形文件的所有用户进行只读访问?
问题描述
在我用 php 编写并使用 Symfony v2.8 的网络应用程序中,我有一个联系页面,当提交给服务器时会创建两封应该包含图形的电子邮件,但是当实际包含此图形时,我收到以下错误:
Unable to open file for reading
[https://fake.net/Resources/public/images/landing_page/mypic.png]
500 Internal Server Error - Swift_IoException
Stack Trace
in vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php
at line 144 -
if (!isset($this->_reader)) {
$pointer = @fopen($this->_path, 'rb');
if (!$pointer) {
throw new Swift_IoException(
'Unable to open file for reading ['.$this->_path.']'
);
}
但是,问题不在于 swiftmailer,因为如果我不包含图形,则电子邮件会成功创建和发送。或者,当我用来保护我的网站的 .htaccess 文件被重命名时,电子邮件会再次成功创建并在包含图形图像时发送。
今天,在尝试解决此问题时,我发现在我的网络应用程序的几个页面中显示的相同图形现在在 .htaccess 就位时无法加载。我现在得到的错误是:
GET https://fake.net/Resources/public/images/landing_page/mypic.png
500 (Internal Server Error)
以下是我添加到 .htaccess 文件末尾的行:
# Allow access of the mypic logo for emails
<files mypic.png>
order allow,deny
allow from all
</files>
在上述语句之前是以下行,它一直在 .htaccess 文件中:
<IfModule mod_rewrite.c>
RewriteEngine On
<If "%{HTTP_REFERER} != ''">
# Hot link prevention for css|gif}htm|html|jpg|js|mp3|mp4|php|png files
# from any other domain than %{HTTP_HOST}
# See http://tltech.com/info/referrer-htaccess/
RewriteCond %{HTTP_REFERER} !^.*$ [NC]
RewriteCond %{HTTP_HOST}@@%{HTTP_REFERER} !^([^@]*)@@https?://\1/.* [NC]
RewriteRule .*\.(css|gif}htm|html|jpg|js|mp3|mp4|php|png)$ - [NC,F]
</If>
</IfModule>
虽然这些都没有将文件访问限制为只读,但文件的权限设置为 664 可以做到这一点。 当文件的权限为 666 时,.htaccess 可以强制只读访问吗?
该语句似乎授予对具有该名称的任何文件的访问权限,而不仅仅是我希望具有无限只读访问权限的一个特定文件,该文件位于 web\Resources\public\images\landing_page 目录中。但是,当我尝试使用相对或绝对路径时,电子邮件创建仍然会出现相同的错误。 请在建议的任何解决方案中解决这个问题。
显然,该声明导致网站访问图形出现问题。 如何正确覆盖控制在我的电子邮件中访问此文件的 .htaccess 规则?
有人告诉我将文件移出 .htaccess 文件控制的区域,但我的整个站点都由 .htaccess 控制,因此将图形文件移动到站点 web 目录上方的目录会使图形文件超出我的网站范围,所以也不可用。
解决方案
推荐阅读
- python - python-使用os.walk查找文件名中值最高的文件
- esp32 - ESP32 devkit v1 + LoRa rf96:spi 配置
- sql - Group By 组合到 CASE (SQL DB2)
- javascript - 如何获得razorpay的失败或弹出关闭事件
- spring - 在一个表单中填充两个对象 Thymeleaf
- javascript - Spotfire JsViz 使用 AmCharts 4 库的带有子类别的聚类条形图
- azure - AWS 中的 Azure 监控解决方案
- numpy - 如何从numpy中选择行
- database - InfluxDB - 如何获取最后一个值然后过滤它们而不是 filter->last
- python - TensorFlow 输入形状解释