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/
这部分确实令人困惑...是否应该对直接访问的文件进行一些不同的处理?
说清楚。使用最后的代码,我得到了以下行为:
- 如果我尝试访问网站上的任何页面(例如:“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/
那你能解释一下如何重定向直接访问的文件吗?
提前致谢!
听起来您可能在 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
) 将从该替代位置读取文件。
我的目标如下:当用户试图访问图像(或 /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/
这部分确实令人困惑...是否应该对直接访问的文件进行一些不同的处理?
说清楚。使用最后的代码,我得到了以下行为:
- 如果我尝试访问网站上的任何页面(例如:“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/
那你能解释一下如何重定向直接访问的文件吗? 提前致谢!
听起来您可能在 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
) 将从该替代位置读取文件。