WordPress:无法通过.htaccess 实现直接图像访问重定向

WordPress: can't achieve direct image access redirection via .htaccess

我的目标如下:当用户试图访问图像(或 /wp-content/uploads/ 中的任何其他附件)时,我需要将他重定向到处理器 PHP 文件,该文件将检查是否用户已登录,文件由该用户上传。

到目前为止我已经找到了这个解决方案:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^.*wp-content/uploads/.*
RewriteRule ^wp-content/uploads/(.*)$ file-processor.php?file= [QSA,L]
</IfModule>

而且它根本不起作用。我尝试了很多不同的组合,但没有成功。然后我决定尝试一些更简单的方法,发现我什至无法通过以下代码重定向直接访问的图像(虽然它适用于网站的任何其他页面):

Redirect 301 / https://example.com/

这部分确实令人困惑...是否应该对直接访问的文件进行一些不同的处理?

说清楚。使用最后的代码,我得到了以下行为:

从我的主题中直接访问的文件也会出现同样的问题。尽管 .htaccess 中有最后一条重定向规则,我仍然可以访问它们:

Redirect 301 / https://example.com/

那你能解释一下如何重定向直接访问的文件吗? 提前致谢!

听起来您可能在 front-end-proxy 后面,该 front-end-proxy 旨在为您的静态内容提供服务。 (Nginx 通常用于此。)代理提供静态内容,完全绕过您的应用程序服务器 (Apache / .htaccess)。这以牺牲某些功能为代价提供了出色的性能。

请求其中一张图片时检查 HTTP 响应 header。您可以通过检查 Server HTTP 响应 header.

来了解发生了什么

可能的解决方案是:

  • 在 front-end 代理中破例排除 /wp-content/uploads 目录。

  • 通过与实际文件系统路径不同的 URL 引用这些 images/resources。

    由于您想要“保护”这些资源,因此您需要将它们存储在 public HTML space 之外(即在文档根目录之上)——因此它们无法通过代理访问。然后,您可以根据需要使用相同的 URL(即 /wp-content/uploads/...),但脚本 (file-processor.php) 将从该替代位置读取文件。