Сделать изображения закрытыми в 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 -----------
Ответы
Ответ 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]
Ответ 4
Самый простой способ сделать это - добавить изображения в сообщения и частные страницы. ![Публикация частной страницы/сообщения]()
Полезные ссылки:
https://codex.wordpress.org/Content_Visibility
https://en.support.wordpress.com/pages/page-visibility/