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. Вот почему я пометил его ответ как правильный ответ на мой вопрос.
2 ответа
Повторяю мой вопрос из IRC: что именно говорит журнал ошибок?
Ну да. - Без предоставленного журнала ошибок я использовал свои магические способности для устранения этой проблемы (Opera 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.
Описание вашей ошибки заставляет меня думать, что вы неправильно настроили соответствие реферера. Нередко добавляется сопоставление рефереров в попытке предотвратить хотлинкинг, чтобы снизить затраты на пропускную способность. Пустые ссылки обычно разрешены, и, конечно, ваш сайт должен быть разрешен. Все остальные обычно отрицаются.
Кажется, что регулярное выражение, которое должно соответствовать вашему сайту, не соответствует вашему сайту. Когда вы делаете тот же запрос без реферера, это работает.
Поскольку вы используете общий хостинг и не имеете доступа к оболочке, вам, вероятно, придется спросить об этом вашего провайдера. Спросите их, есть ли у них защита от хотлинков, и если они есть, попросите их проверить, работает ли она должным образом.
Если вы хотите исключить вероятность того, что ваш файл.htaccess является проблемой, попробуйте удалить его или закомментировать его части и посмотреть, работают ли ваши изображения. Если они все еще не делают, тогда файл.htaccess не является проблемой.