截取对/wp-content/上传/随机文件的请求

时间:2020-07-30 作者:nnolde

我想拦截对WordPress中公共文件的请求,更具体地说,是对位于/wp-content/uploads. 使用request 甚至init 过滤器没有帮助,例如。

add_action(\'init\', function() {
    $currentURI = $_SERVER[\'REQUEST_URI\'];
    if (strpos($currentURI, \'-sab-v\') !== false) {
        return;
    }
});
应将请求捕获到http://localhost:8080/wp-content/uploads/afghanistan-sab-v1-1-586f2f0eb1464db28d20848756de2671.zip, 但是没有。如果我使用request 改为过滤。我知道代码没有任何作用,但断点告诉我它甚至没有被触发。

它当然适用于任何其他WordPress URL,我可以成功拦截除文件下载以外的所有请求。

有人有什么建议吗?

1 个回复
最合适的回答,由SO网友:mozboz 整理而成

我刚刚运行了一个测试,将一个图像上载到媒体库,然后重命名了我的根索引。php文件来破坏Wordpress,但我上传的图像仍然可以通过其wp-content/uploads/... URL。

没有。htaccess文件在wp内容中,也可以上传,这意味着,除非有任何插件可以拦截这些url,否则对这些文件的访问是直接的,而不是通过任何PHP。

所以,要想做你想做的事情,你需要添加一个。htaccess规则,该规则将拦截这些URL并将其传递给PHP脚本,如Wordpress的索引。php。例如,在你的根中有这样的东西。htaccess可以做到:

RewriteRule wp-content/uploads/(.*)$ index.php?uploadUrl=$1 [L,NC]
注意:这将添加到Wordpress块的上方,以便WP不会覆盖和删除它。

然后,在Wordpress处理这些URL之前,您必须捕获它们,然后才能执行您想要执行的任何操作,一个很好的地方就是template_redirect hook, 在Wordpress开始计算如何呈现页面之前运行。

比如:

function hook_upload_url() {
   if (!empty($_GET[\'uploadUrl\'])) {
       // do your thing, path of this file is in $_GET[\'uploadUrl\']
       // perhaps you want to serve a file, or wp_redirect(), then die()
   }
}

add_action( \'template_redirect\', \'hook_upload_url\' );
这里的代码是如何实现您想要的但未经测试的目标的示例。如果您这样做,请回答任何问题。

笔记

这样做可能是一个非常糟糕的主意,因为它会导致对任何媒体的每次访问都会启动一个完整的WP实例,这在默认情况下是不会发生的。您有可能在服务器上增加大量负载

  • 可能有另一种或更好的方法来获取URL查询参数WP样式,而不是直接使用$\\u get

  • 相关推荐

    Remove Jetpack infinite-wrap

    我试图在打开无限滚动的情况下删除无限包装类jetpack添加到帖子中,因为我想将无限加载的帖子添加到网格布局中。我在这里找到了一篇文章,上面说要在函数中添加主题支持内容。php:https://trickspanda.com/customize-jetpack-infinite-scroll/我最后添加了add_theme_support( \'infinite-scroll\', array( \'wrapper\' => false, ) ); 奇怪的是这没有效