Запретить открытие изображения в браузере напрямую
У меня есть папка с картинками 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)