Назад | Перейти на главную страницу

Apache / PHP не показывает изображения

У меня странная проблема с Apache и / или PHP, которая сводит меня с ума. Прежде чем я объясню проблему, вот все, что я знаю об окружающей среде.

Среда

OS: Ubuntu SMP x84_64
Apache Version: 2.x
PHP Version: 4.4.9-nmm4

Это план виртуального хостинга, поэтому у меня нет доступа к оболочке.

Эта проблема

Apache / PHP не отображает изображения, если на них ссылается сам веб-сайт (<img src="..." />). Все запросы изображений возвращают 403 «Запрещено». Но если вы копируете путь к запрошенному изображению и просматриваете его напрямую, изображение отображается. Вообще никаких проблем.

Итак, я могу сделать вывод, что изображение доступно для Apache. Я использую .htaccess файл:

# BEGIN s9y
DirectoryIndex /index.php

<Files *.tpl.php>
  deny from all
</Files>

<Files *.tpl>
  deny from all
</Files>

<Files *.sql>
  deny from all
</Files>

<Files *.inc.php>
  deny from all
</Files>

<Files *.db>
  deny from all
</Files>

# END s9y

AddHandler php4-cgi .php

Как вы не видите ничего по поводу изображений. Никаких правил перезаписи или чего-то подобного.

Что я пробовал до сих пор

До сих пор я много гуглил и нашел несколько подсказок, предполагающих, что установка директив EnableSendfile и EnableMMAP к Выключено может помочь. Я попробовал, но ничего не вышло. Я предполагаю, что мне придется перезапустить Apache, чтобы они вступили в силу. Но, как я сказал ранее, это план виртуального хостинга. Я не могу перезапустить Apache.

Я надеюсь, что кто-то может мне помочь :)

Решение

Решение моей проблемы очень простое. Как следует из обоих ответов, проблема заключается в защите от горячих ссылок. Как ни странно, защита сделана в другом проекте в той же учетной записи для другого домена. Я удалил защиту от горячих ссылок из файла .htaccess, и теперь он снова работает.

Отдельное спасибо Игорю. Мы с ним решили проблему в irc. Вот почему я отметил его ответ как правильный ответ на мой вопрос.

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

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

Поскольку вы находитесь на общем хостинге и не имеете доступа к оболочке, вам, вероятно, придется спросить об этом своего провайдера. Спросите их, есть ли у них защита от хотлинков, и если они есть, попросите их проверить, правильно ли она работает.

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

Повторяю свой вопрос из IRC: что именно написано в журнале ошибок?

Ну да. - Не имея журнала ошибок, я использовал свои магические способности для отладки этой проблемы (Opera's Dragonfly). Я заметил, что, черт возьми, он действительно был совершенно последовательным.

Каждое изображение будет 403, если не вызвано напрямую.

Я попытался воспроизвести в командной строке, и мне удалось это:

igalic@resix:~$ curl -H"Referer: http://www.example.org/" -i http://www.example.org/foobar.jpg
HTTP/1.1 403 Forbidden

Из этого я пришел к выводу, что была некоторая защита Hot-Link, которая явно использовала неправильный URL-адрес в качестве Referer.