Возвращать код состояния Http в Apache из PHP?

На своей локальной машине для разработки я загрузил PDT + Zend Server, который включал Apache 2.2.16 и PHP 5.3.5, работающий на Windows 7. На моем локальном сайте я включил.htaccess, который включает ErrorDocuments для 404, 403 и 500 В моем PHP я использую заголовок ("Http/1.0 404 Not Found"), когда пользователь запрашивает документ, который не существует. На моем локальном сервере все отлично работает. Мой пользовательский ErrorDocument появляется, и я счастлив.

Я загружаю все на свой общий хост, работающий под управлением Apache 2.2.38 и PHP 5.3.8 на сервере Linux, и внезапно ErrorDocuments работают, только если они не приходят из PHP.

Есть ли какие-то настройки в PHP.ini, httpd.conf или.htaccess, которые позволяют Apace видеть коды ошибок из PHP, что заставляет мой dev-сервер работать правильно, но не мой общий хост?

Исследуя это, все, что я когда-либо видел, было: "Apache не видит код состояния, как только он переходит на PHP". В таком случае, почему мой сервер Dev работает правильно?

редактировать

Для ясности вот.htaccess:

# Use PHP 5.3
Action application/x-hg-php53 /cgi-sys/php53
AddHandler application/x-hg-php53 .php 

#Deny Include Files
<Files *.inc>
order deny,allow
deny from all
</files>

#Provide custom error documents
ErrorDocument 404 /Errors/Http404.php
ErrorDocument 403 /Errors/Http403.php
ErrorDocument 500 /Errors/Http500.php

.Htaccess работает, потому что если пользователь переходит на myhost.com/jdkslfjdls, он получает содержимое файла Errors/Http404.php.

Однако, если пользователь переходит на myhost.com/images/GetImage.php?Id=5 (когда нет изображения № 5), пользователь не получает никакого контента.

Если они перейдут к (Внутренний IP-адрес)/images/GetImage.php?Id=5, пользователь получит содержимое Errors/Http404.php.

Аналогичная проблема возникает, если пользователь пытается получить доступ к GetImage.php?Id=6 (когда есть изображение № 6, но у него нет разрешения). На общем сервере они получают пустую страницу или ошибку браузера 403. На моем сервере разработчиков они получают мою собственную страницу ошибки 403.

Опять же, документ об ошибке 403 работает на общем сервере, если я пытаюсь получить доступ к файлу.inc.

2 ответа

Проверьте, есть ли у вас

AllowOverride ALL

в вашем apache.conf под директивой Directory внутри VirtualHost, соответствующей вашему сайту

В любом случае, это может быть одной из возможных причин, другой может быть проверка того, включен ли у вас mod_rewrite

В системах на основе Ubuntu или Debian вы просто должны связать или скопировать mod_rewrite.load из /etc/apache2/mods-available/mod_rewrite.load в /etc/apache2/mods-enabled/mod_rewrite.load

Переписать не нужно ничего делать, но я видел случаи, когда ваши директивы.htaccess могут требовать mod_rewrite

Так что проверяйте эти вещи в apache conf файлах. Если ничего не происходит, свяжитесь со мной @ phpcip@gmail.com

Надеюсь, что это работает.

Вы уверены, что ваш файл.htaccess используется на сервере? Иногда хостинговая компания не разрешает перезаписывать глобальные настройки apache локальными файлами.htaccess.

Однако если у вас есть доступ к конфигурации вашего виртуального хоста, вы можете обратиться к следующей директиве

AllowOverride All

Если вместо этого вы найдете

AllowOverride None

попробуйте изменить, как указано выше.

Другие вопросы по тегам