在Wordpress中将图像设为私有

Zet*_*eth 19 php wordpress .htaccess wordpress-plugin

我正在制作一个网站,我想私下.最重要的部分是,如果没有用户首先登录,则无法看到域上的图像.因此,如果用户未登录,我希望将所有流量重定向到www.DOMAINNAME.com/wp-admin(也适用于图片).

这是我尝试过的:

1)插件.我已经尝试了Wordpress Force登录,插件wp-require-login即将推出的页面和维护模式.

2)从这个答案添加一个功能.这是:

function is_login_page() {
    return in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) );
}

function wpse_make_blog_private() {
    if ( ! is_user_logged_in() && ! is_admin() && ! is_login_page() ) { 
    global $wp_query;
    $wp_query->set_404();
    }
}
add_action( 'wp', 'wpse_make_blog_private' );
Run Code Online (Sandbox Code Playgroud)

如果我转到图片的直接网址(例如http://www.DOMAINNAME.com/uploads/2015/10/foobar.jpg),则这些内容不会重定向流量.

可以这样做吗?

-----------------编辑1 --------------

Mevius指出,如果您输入图像的直接URL,可能无法加载Wordpress,因此他建议,它应该在apache级别完成.

-------------编辑结束1 -----------

Ric*_*ote 12

您可以根据需要将其设置为复杂或简单.最简单的是按照Hemnath Mouli的建议检查推荐人,但这可能很容易欺骗.

但是,如果你想要真的很深......;)

将.htacess文件与RewriteRule一起使用,将所有图像重写为一个PHP脚本,引导Wordpress并检查用户的身份验证状态.此外,您应该将.htaccess文件添加到images文件夹,以拒绝直接访问该文件夹以排除边缘情况.

警告:这个代码只是证明你已经开始的概念!

的.htaccess

RewriteRule ^(.*\.(jpg|gif|png))$ isAuthenticated.php?path=$1

isAuthenticated.php

require_once("wp-blog-header.php");

$allowedExtensions = array("jpg", "gif", "png");

$path = $_SERVER["DOCUMENT_ROOT"].DIRECTORY_SEPARATOR.$_REQUEST["path"];
$pathInfo = pathinfo($path);

// Check if the Wordpress user is logged in and if the file extension is allowed
// @see https://codex.wordpress.org/Function_Reference/is_user_logged_in
if (!is_user_logged_in() || !in_array($pathInfo["extension"], $allowedExtensions)) {
    header("HTTP/1.1 403 Forbidden");
    exit;
}

if(!file_exists($path)) {
    header("HTTP/1.1 404 Not Found");
    exit;
}

// Display the file and set the correct mimetype
$resource = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($resource, $path);
finfo_close($resource);

header("Content-Type: ".$mimetype);
readfile($path);
Run Code Online (Sandbox Code Playgroud)

  • +1当你不想改变当前系统的任何内容时,这就是你要走的路.无论如何,最好在开始时将"私有"文件放在公共范围之外,但这几乎与此相同. (3认同)

hem*_*uli 10

使用 .htaccess

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]
Run Code Online (Sandbox Code Playgroud)

如果直接访问图像,则返回403,但允许它们在现场显示.