Запретить открытие изображения в браузере напрямую

У меня есть папка с картинками 1.jpg, 2.jpg, 3.jpg... Есть ли способ запретить пользователю вводить URL-адрес, например www.example.com/pictures/3.jpg, прямо в браузер и загружать это изображение?

Изображение должно быть загружено, если веб-html вызывает его (

Это возможно сделать? Использование IIS URL Rewrite или какой-либо другой метод?

Я использую IIS7.5. Моя цель - не дать пользователям увидеть следующее изображение... Я знаю, что я мог бы закодировать имена, но у меня есть какая-то старая база данных с 1-1000, и я бы как-то хотел, чтобы только пользователи не просматривали, используя URL без реферера... Потому что каждый день я обслуживаю одну фотографию, и я не хочу, чтобы они находили остальные...

Это вообще возможно?

1 ответ

Решение

Вы можете попробовать это с переписать URL, полагаясь на HTTP_REFERRER но это не всегда точно и может блокировать пользователям некоторых браузеров просмотр изображений на вашем сайте.

На вашем месте я бы переместил все ваши изображения за пределы вашего веб-каталога (или, предпочтительно, просто заблокировал pictures в целом), а затем создайте скрипт php, который называется image.php:

<?php

define('NUM_IMAGES', 1000);

header('Content-Type: image/png');

$image = imagecreatefromjpeg('pictures/'.((int)(time()/86400)%NUM_IMAGES+1).'.jpg');
imagepng($image);

?>

Сценарий, приведенный выше, выведет изображение в браузер пользователей, которое будет менять один раз в день на следующее изображение в последовательности, и вы можете использовать его следующим образом: <img src="image.php" />

Затем, поскольку ваша папка с изображениями заблокирована, никто не сможет увидеть другое изображение. Тогда все еще можете запросить image.php напрямую, но они увидят только изображение дня.

Если вы не хотите поворачивать автоматически один раз в день и хотите вручную управлять отображением изображения, вы также можете просто заменить '.((int)(time()/86400)%1000+1).' с номером изображения, которое вы хотите отобразить.

Если вы хотите, чтобы он вращался автоматически, но хотите контролировать время его обновления, вы можете добавить смещение к time() лайк: ((time()+$offset)/86400)

Другие вопросы по тегам