有没有办法在Wordpress或PHP中将中间件附加到特定路由?我想在允许访问uploads文件夹之前运行中间件功能,以检查用户是否有权访问该文件,然后再允许他们下载。
我来自node.js / express的背景,所以如果它有帮助我想做这样的事情:
app.use('/wp-content/uploads', function(req, res, next) {
// do stuff with req and call next to continue,
// or use res to end the request early.
});
答案 0 :(得分:2)
有各种WordPress插件可以限制对内容或下载的访问,主要是基于已注册或未注册的逻辑以及用户拥有的权限。
他们背后的基本逻辑是这样的:
// Redirect guests
function guest_redirect() {
$guest_routes = array(
'member-login',
'member-account',
'member-register',
'member-password-lost',
'member-password-reset'
);
// Force login or registration
if ( !is_user_logged_in() && !is_page($guest_routes) ) {
wp_redirect( 'member-login' );
exit;
}
}
add_action( 'template_redirect', 'guest_redirect' );
此外,WordPress还有REST API(official doc here for your need)。但是,在没有正确测试的情况下使用REST API为生产站点使用自定义的东西可能存在风险并且使用起来很复杂。
答案 1 :(得分:0)
从我从您的描述中获得的用例,您可以使用已有的许多wordpress插件中的一个来解决您的问题,例如您可以使用" downnload manager"处理上传和下载内容:https://wordpress.org/support/plugin/download-manager 或使用类似https://wordpress.org/plugins/easy-digital-downloads/
的内容您可以在此处找到更多插件https://wordpress.org/plugins/
如果您真的想要编写自定义内容,可以添加使用RewriteRule通过" protect.php"发送上传文件夹的所有请求。脚本,在.htaccess文件中添加类似的东西
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^wp-content/uploads/(.*)$ protect.php?filename=$1 [L,QSA]
在protect.php脚本中,您可以实现自定义逻辑,以允许/禁止访问特定的"文件名"
要使用自定义protect.php文件中的WP函数,你应该包含wp-load.php,或多或少是这样的:
require_once(rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/wp-load.php');