Как запретить файлу прямой доступ по URL?
Я использую Apache, и у меня есть пример веб-папки на локальном хосте, например:
http://localhost/test/
Файлы в test
папке:
index.html
sample.jpg
.htaccess
Пример источника index.html
:
<html>
<body>
<img src="sample.jpg" />
</body>
</html>
Когда я запускаю веб-сайт по адресу http://localhost/test/
, он просто показывает изображение "sample.jpg" на странице.
Проблема:
- Я хочу, чтобы изображение, отображаемое как
http://localhost/test/sample.jpg
отображалось непосредственно в строке URL.
Примечание. Я обнаружил, что приведенные ниже решения работают при тестировании на всех браузерах, кроме Firefox.
Ответы
Ответ 1
Попробуйте следующее:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC]
RewriteRule \.(gif|jpg)$ - [F]
Возвращает 403, если вы напрямую обращаетесь к изображениям, но позволяет их отображать на сайте.
Примечание.. Возможно, когда вы открываете какую-то страницу с изображением, а затем копируете этот путь изображения в адресную строку, вы можете видеть это изображение, это только из-за кеша браузера, на самом деле это изображение не было загружено с сервера (из Даво, полный комментарий ниже).
Ответ 2
Правило rosipov отлично работает!
Я использую его на живых сайтах, чтобы отображать пустое или специальное сообщение;) вместо попытки прямого доступа к файлам я предпочел бы защитить бит от прямого просмотра. Я думаю, что это более забавно, чем Запрещенный 403.
Итак, беря правило rosipov для перенаправления любого прямого запроса на файлы {gif, jpg, js, txt} на 'messageforcurious':
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd.*$ [NC]
RewriteRule \.(gif|jpg|js|txt)$ /messageforcurious [L]
Я рассматриваю это как вежливый способ запретить прямое подключение к, скажем, CMS разумным файлам, таким как xml, javascript... с учетом безопасности. Для всех этих ботов, просматривающих веб-страницы в настоящее время, мне интересно, что сделает их algo из моего "messageforcurious".
Ответ 3
Прежде всего, найдите, где находится файл конфигурации httpad.conf главного apaches. Если вы используете Debian, он должен быть здесь: /etc/apache/httpd.conf
. Используя некоторый редактор файлов, такой как Vim или Nano, откройте этот файл и найдите строку, которая выглядит следующим образом:
Options Includes Indexes FollowSymLinks MultiViews
затем удалите слова "Индексы" и сохраните файл. Строка должна выглядеть так:
Options Includes FollowSymLinks MultiViews
После этого перезапустите apache (например, перезапуск /etc/init.d/apache в Debian). Это оно!
Ответ 4
На основе ваших комментариев выглядит так, как вам нужно:
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC]
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC]
Я тестировал его на своем локальном хосте, и он работает нормально.
Ответ 5
Когда я использовал его на своем веб-сервере, я могу переименовать только локальный хост, например так:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com.*$ [NC]
RewriteRule \.(gif|jpg)$ - [F]
Ответ 6
В каком файле мы должны написать следующие строки?
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC]
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC]
RewriteRule \.(gif|jpg)$ - [F]