mod_rewrite защита изображений - PullRequest
1 голос
/ 21 марта 2011

Так что я создаю веб-сайт, где пользователи могут видеть предварительный просмотр изображения в меньшем размере, и им нужно зарегистрироваться, чтобы увидеть полное разрешение.

Я не делаю миниатюру изображений, я просто загружаю все изображение и масштабирую его. Поскольку изображения в низком разрешении, это не проблема.

Проблема в том, что пользователи могут просто щелкнуть правой кнопкой мыши на изображении и выбрать «открыть в новой вкладке», и они его получили. Я хочу отключить это так, чтобы файлы .jpg и .gif можно было видеть в браузере в -tag, но не тогда, когда они пытаются ввести путь в адресной строке.

Я на Apache.

Возможно ли это? Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 21 марта 2011

Что-то вроде:

RewriteEngine On
RewriteCond   %{HTTP_REFERER}  !^$
RewriteCond   %{HTTP_REFERER}  !^http://www.yourdomain.com/.*$ [NC]
RewriteCond   %{HTTP_REFERER}  !^http://yourdomain.com/.*$     [NC]
RewriteRule   ^/PublicFiles/*$ /page-about-direct-links.html

не проверено

0 голосов
/ 21 марта 2011

Изменить подход:

  1. Если вы показываете маленькое изображение, никогда не используйте исходное изображение. Это займет больше времени для загрузки, и это плохой навык. Вместо этого используйте миниатюру, сохраняйте пропускную способность, ускоряйте страницу.

  2. Переместите исходные изображения за пределы веб-папки. Таким образом, они не могут быть доступны напрямую через ссылку.

  3. Создайте php-скрипт, который будет загружать исходное изображение, если пользователь зарегистрирован.

mod_rewrite не может проверить, зарегистрирован ли пользователь или зарегистрирован. Что касается Apache, то можно использовать « basic authentican » (но это не лучший способ сделать это).

function getImageFromOutside ( $homePath, $file )
{
    if ( file_exists ( $homePath . '/' . $file ) )
    {
        $contents = file_get_contents ( $homePath . '/' . $file );
        return $contents;
    }
}
$homePath = 'some_path/img';

if ( isset ( $_GET['uid'] ) )
{
    $img = $_GET['uid'] . '.jpeg';
    header ( 'Content-type: image/jpeg' );
    echo getImageFromOutside( $homePath, $img );
} else {
    print_r ( $_GET );
    echo file_exists ( $homePath . '/' . $file );
}

Протестировано, со структурой папок

  • корень
    • 1027 * IMG *
    • publichtml
0 голосов
/ 21 марта 2011

Вам понадобится версия с большими пальцами и большая версия.Когда вы уменьшаете его размер, вы только уменьшаете его размер.На самом деле полноразмерное изображение уже на их компьютере.

...