На всех моих серверах Apache я использую защиту от горячих ссылок, потому что мне не нравится идея, что кто-то может вставлять мои изображения / флэш-файлы на свои сайты, используя пропускную способность моего сервера.
Чтобы заставить работать защиту от хотлинков, в моем Apache .htaccess я просто использую это:
#Hotlink protection (only for www.domain.it cause http://domain.it is being redirected)
RewriteCond %{HTTP_REFERER} !^http://www.domain.it/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.domain.it$ [NC]
RewriteRule .*\.(wav|swf|jpg|jpeg|gif|png|bmp|js)$ - [F,NC]
Это хорошо работает, но недавно я обнаружил, что когда я прошу http://www.domain.com/somepage.htm/
(с последней косой чертой) похоже, что сработала защита от хотлинков, и сервер останавливает загрузку страницы .(wav|swf|jpg|jpeg|gif|png|bmp|js)
файлы
Вы знаете, как я могу исправить это в .htaccess ???
До сегодняшнего дня я даже думал, что сервер должен возвращать ошибку, если я вхожу как URL http://www.domain.com/somepage.htm/
(с последней косой чертой). Но я видел, что это нормально, потому что если вы посмотрите http://www.php.net/docs.php он возвращает ту же страницу http://www.php.net/docs.php/ (последняя косая черта). Почему так, не могли бы вы мне немного объяснить ?!
Спасибо
Вы уверены, что это защита от хотлинков? Если ваш сайт оформлен примерно так:
/somepage.htm
/images/a.jpg
Тогда, если somepage.htm имеет относительные пути к изображению, например <img src="images/a.jpg">
и вы идете в http://example.com/somepage.htm/
, то ваш веб-браузер решит, что он находится в каталоге somepage.htm, и попытается загрузить изображение http://example.com/somepage.htm/images/a.jpg
. Apache, вероятно, отправит вам еще одну копию somepage.htm, если вы перейдете туда, что приведет к тому, что ваш браузер покажет неработающее изображение.
Я не уверен, есть ли у Apache параметр, чтобы отключить это. Это не имеет особого смысла для простых файлов HTML, но причина, по которой Apache (и другие серверы) разрешает это, заключается в сайтах, которые используют «красивые URL-адреса» (например, URL-адреса serverfault!), Где URL-адрес выходит за пределы фактического файла. На сервере serverfault нет файла с названием «urls-with-final-slash-trigger-hotlink-protection-on-my-server», который только люди (и Google) могут прочитать. Вы можете легко загрузить этот вопрос с помощью URL-адреса с окончательной косой чертой запускают защиту от горячих ссылок на моем сервере
Хотя я не знаю, как произошел сбой сервера (есть много способов сделать это), почти наверняка нет файла с именем «197935». Вполне возможно, что существует сценарий с именем "questions", и сервер может запустить этот сценарий, и сценарий увидит весь URL-адрес, найдет номер в базе данных и создаст эту страницу.