Как закрыть доступ по прямой ссылке на файл в wordpress?

Ссылка скопирована
1 ответ

Здравствуйте!

На сайте есть папка с файлами, сейчас по прямой ссылке можно перейти и открыть файл. При этом файл необходимо открывать через iframe при просмотре через сайт и отправлять по почте. Как закрыть доступ по прямой ссылке на эти файлы? Возможно ли в крайнем случае сделать редирект на главную сайта?

Правки в htaccess повалили сайт. Папка в которой лежат файлы выдает сейчас 403 ( это хорошо ).

Дополнительно:

Ну содержимое папки можно отдавать скриптом

  • Сделайте условие с проверкой HTTP_REFERER и HTTP_HOST при запросе файлов из этого каталога.
    По прямой ссылке будет отдаваться контент, но при условии, что пользователь запросил его из страницы вашего сайта.
    Ограничение не идеальное, так как заголовок HTTP_REFERER клиент может поставить какой угодно в своих запросах.
  • alexalexes, это не сильно поможет, такой хотлинкинг для бедных, обычно подобное бесплатно хостер дает. Лучше все же отдавать скриптом, там можно проверять что угодно
  • Ответы:

    Здравствуйте! Если вы хотите закрыть доступ к файлам на вашем сайте, то можно использовать плагин Prevent Direct Access. Он предоставляет возможность защитить ваши файлы от прямого доступа и предотвратить индексацию в поисковых системах. Вы можете использовать этот плагин для защиты файлов в вашей папке. Чтобы начать защиту файлов, перейдите в раздел Media и выберите файлы, которые вы хотите защитить. Нажмите кнопку “Protect this file” для защиты файла. Если вы хотите настроить параметры защиты, нажмите кнопку “Configure file protection”. Если вы хотите перенаправить пользователя на главную страницу сайта, если он попытается получить доступ к файлу, вы можете использовать плагин Redirection. Он позволяет создавать правила перенаправления для вашего сайта. Надеюсь, это поможет вам решить вашу проблему!

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Алексей Денисов Ответ

    Закрыть прямой доступ к файлу и при этом показывать его в iframe можно, но не через простой HTTP_REFERER. Referer легко подделывается, а часть браузеров/политик приватности может его не отправлять. Нормальный способ — хранить файлы вне публичной директории и отдавать их через PHP-скрипт после проверки доступа.

    Схема:

    • файлы лежат не в /wp-content/uploads/public/, а в закрытой папке;
    • прямая ссылка на файл недоступна;
    • iframe открывает URL вида /file-view/?id=123&token=...;
    • WordPress проверяет права/токен;
    • если доступ разрешён — отдаёт файл с правильными headers.

    Пример общей идеи:

    add_action('template_redirect', function () {
        if (!isset($_GET['secure_file'])) {
            return;
        }
     
        $file_id = absint($_GET['secure_file']);
     
        if (!is_user_logged_in()) {
            status_header(403);
            exit;
        }
     
        $path = get_secure_file_path($file_id);
     
        if (!$path || !file_exists($path)) {
            status_header(404);
            exit;
        }
     
        header('Content-Type: application/pdf');
        header('Content-Disposition: inline; filename="' . basename($path) . '"');
        readfile($path);
        exit;
    });

    add_action('template_redirect', function () { if (!isset($_GET['secure_file'])) { return; } $file_id = absint($_GET['secure_file']); if (!is_user_logged_in()) { status_header(403); exit; } $path = get_secure_file_path($file_id); if (!$path || !file_exists($path)) { status_header(404); exit; } header('Content-Type: application/pdf'); header('Content-Disposition: inline; filename="' . basename($path) . '"'); readfile($path); exit; });

    Если нужно именно через .htaccess, можно запретить прямой доступ к папке, но тогда iframe тоже не сможет открыть файл напрямую. Поэтому iframe должен ссылаться не на файл, а на контроллер, который проверяет доступ и отдаёт содержимое.

    Редирект на главную при прямой ссылке технически возможен, но для защищённых файлов лучше отдавать 403/404. Редирект маскирует проблему и может создавать SEO-мусор.

    Итог: для настоящей защиты не используйте uploads как публичное хранилище. Выносите файлы в закрытую папку и отдавайте через WordPress/PHP с проверкой прав. Referer годится только как слабая защита от хотлинкинга, но не как безопасность.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно