Подтвердить что ты не робот

Сделать изображения закрытыми в Wordpress

Я создаю сайт, который хотел бы сделать частным. Наиболее важная часть состоит в том, что изображения в домене не видны, без регистрации пользователя в первую очередь.  Поэтому я хочу, чтобы весь трафик перенаправлялся на www.DOMAINNAME.com/wp-admin (также для изображений), если пользователь не вошел в систему.

Вот что я пробовал:

1) Плагины. Я пробовал как Wordpress Force Login, плагин 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' );

Не из этих вещей перенаправляет трафик, если я перехожу к прямому URL-адресу для изображения (например, http://www.DOMAINNAME.com/uploads/2015/10/foobar.jpg).

Можно ли это сделать?

----------------- ИЗМЕНИТЬ 1 --------------

Mevius указал, что Wordpress не может быть загружен, если вы введете прямой URL-адрес изображения, поэтому он предлагает, чтобы это было сделано на уровне apache.

------------- КОНЕЦ ИЗМЕНЕНИЯ 1 -----------

4b9b3361

Ответ 1

Вы можете сделать это сложным или простым, как вы хотите. Самое простое - проверить реферер, как предложил Хемнат Мули, но это может легко подделать.

Однако, если вы хотите пойти очень глубоко...;)

Используйте файл .htacess с RewriteRule, чтобы переписать все изображения в PHP script, который загружает Wordpress и проверяет статус аутентификации пользователя. Также вы должны добавить файл .htaccess в папку изображений, чтобы запретить прямой доступ к папке, чтобы исключить случаи краев.

ПРЕДУПРЕЖДЕНИЕ: ЭТОТ КОД ПРОСТО ПРОФИЛАКТИРОВАТЬ КОНЦЕПТУ, ЧТОБЫ ПОЛУЧИТЬ ВАС НАЧАЛО!

.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);

Ответ 2

Используйте .htaccess

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

Возвращает 403, если вы напрямую обращаетесь к изображению, но позволяет отображать их на сайте.

Ответ 3

Использовать .htaccess

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