【问题标题】:WordPress: can't achieve direct image access redirection via .htaccessWordPress:无法通过 .htaccess 实现直接图片访问重定向
【发布时间】:2021-11-24 09:56:55
【问题描述】:

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

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

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

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

Redirect 301 / https://example.com/

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

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

  • 如果我尝试访问网站上的任何页面(例如:“siteurl.com”或“siteurl.com/about”),则会按预期重定向到“https://example.com/”。
  • 如果我尝试访问媒体“siteurl.com/wp-content/uploads/2021/10/someimg.jpg”,那么我可以访问该媒体并查看它,而我仍然希望被重定向到“https: //example.com”,但我没有得到任何重定向。

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

Redirect 301 / https://example.com/

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

【问题讨论】:

  • 我已经更新了我的答案。

标签: php wordpress .htaccess redirect server


【解决方案1】:

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

在请求这些图像之一时检查 HTTP 响应标头。您可以通过检查Server HTTP 响应标头来了解正在发生的事情。

可能的解决方案是:

  • 在前端代理中例外以排除/wp-content/uploads目录。

  • 通过与实际文件系统路径不同的 URL 引用这些图像/资源。

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

【讨论】:

  • 谢谢!我并没有真正了解“前端代理”。服务器端魔法不是我的利基。但我最终将图像保存在公共 HTML 空间之外(基本上,在通用“public_html”文件夹之外),然后创建一个脚本来检查用户是否登录以及他是否有权访问具有特定名称的文件。我使用了一个新的 WordPress CPT 来建立用户和文件之间的关系。现在一切都像魅力一样发挥作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 2015-04-07
  • 1970-01-01
相关资源
最近更新 更多