Возвращать код состояния Http в Apache из PHP? - PullRequest
3 голосов
/ 16 сентября 2011

На своей локальной машине для разработки я загрузил 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».В таком случае, почему мой сервер разработки работает правильно?

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

Для ясности вот .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.На моем dev-сервере они получают мою собственную страницу ошибки 403.

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

Ответы [ 2 ]

0 голосов
/ 16 сентября 2011

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

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

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

0 голосов
/ 16 сентября 2011

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

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

AllowOverride All

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

AllowOverride None

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

...