用于热链接保护的 Wordpress .htaccess 不显示 Woocommerce 电子邮件图像

Wordpress .htaccess for hotlink protection does not show Woocommerce email images

为了保护我的 Wordpress 网站图片,我在上传文件夹中的 .htaccess 文件中添加了几行。

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^https://example.com/ [NC]


RewriteRule .? - [S=1]
RewriteRule .(gif|jpg|jpeg)$ - [NC,L,F]

一切正常,尝试访问图像的用户 link 发现了一条 403 消息。但是我注意到 Woocommerce 发送的电子邮件没有显示图像,这可能是由于我添加的规则。我该怎么办?

这些(网络)邮件客户端很可能完全抑制 Referer header,因此您需要允许 empty Referer 在你的规则中。

但是,这也将允许直接“访问图像link”的用户。但这不是“hotlink 保护”。 Hotlinking 是当图像嵌入第三方网站(在另一个域上)时 - 这仍然应该被阻止(大部分时间)。

例如,修改您的规则以允许 empty Referer header:

RewriteCond %{HTTP_REFERER} ^$ [OR]
RewriteCond %{HTTP_REFERER} ^https://example.com/ [NC]
RewriteRule .? - [S=1]
RewriteRule \.(gif|jpg|jpeg)$ - [NC,F]

(注意:您在最后一条规则中的文字点之前缺少 backslash-escape。这里不需要 L 标志,因为 F 标志意味着 L.)

但是,网络邮件客户端也可能生成与托管网络邮件客户端的(自定义)域相关的 Referer。您需要检查 HTTP 请求以确定 Referer 这些请求的结果。不幸的是,由于网络邮件客户端的性质各不相同,这可能 difficult/impossible 无法可靠地过滤。

如果可能,电子邮件中使用的图像应存储在不同的“未受保护”位置。

请注意,Referer header 充其量是不可靠的。用户可以选择在他们的浏览器中抑制 Referer header。并且网站本身可以使用 referrer-policy 在现代浏览器中抑制 Referer header(如果您允许空的 Referer,这将阻碍您的“热 link 保护” ).