Я делаю сайт, который хотел бы сделать частным. Наиболее важная часть заключается в том, что изображения в домене не видны, без регистрации пользователя в первую очередь. Поэтому я хотел бы, чтобы весь трафик перенаправлялся на 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' );
Non из этих вещей перенаправляет трафик, если я перехожу к прямому URL-адресу для изображения (например, http://www.DOMAINNAME.com/uploads/2015/10/foobar.jpg ).
Это можно сделать?
—————– ИЗМЕНИТЬ 1 ————–
Мевиус указал, что WordPress не может быть загружен, если вы введете прямой URL-адрес изображения, поэтому он предлагает, чтобы он выполнялся на уровне apache.
————- КОНЕЦ РЕДАКТИРОВАНИЯ 1 ———–
Вы можете сделать это сложным или простым, как вы хотите. Самое простое – проверить реферер, как это было предложено Хемнатом Мули, но это может легко подделать.
Однако, если вы хотите пойти очень глубоко …;)
Используйте файл .htacess с RewriteRule, чтобы переписать все изображения в скрипт PHP, который загружает 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);
Использовать .htaccess
RewriteEngine on RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] RewriteRule \.(gif|jpg)$ - [F]
Возвращает 403, если вы напрямую обращаетесь к изображению, но позволяет им отображаться на сайте.
Использовать .htaccess
RewriteEngine on RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] RewriteRule \.(gif|jpg)$ - [F]
Самый простой способ сделать это – добавить изображения в сообщения и частные страницы.
Полезные ссылки:
https://codex.wordpress.org/Content_Visibility
https://en.support.wordpress.com/pages/page-visibility/