Проблема с apache mod_rewrite и 404 страницами - PullRequest
2 голосов
/ 25 сентября 2011

У меня есть пользовательская страница ошибки 404 и правило mod_rewrite.Если я получаю доступ к странице, которая не существует, я получаю свою страницу ошибки 404.Моя проблема в том, что если я выдаю заголовок 404 со своей страницы php, он не открывает мою страницу 404, вместо этого я получаю следующее:

Not Found

The requested URL /index.php was not found on this server.

Additionally, a 404 Not Found error was encountered while trying
to use an ErrorDocument to handle the request.

Это мой .htaccess:

RewriteEngine on
ErrorDocument 404 /errors/404.php
RewriteRule ^[A-Za-z0-9]{8}/$ /index.php

Это мой редирект из /index.php, который будет 404, только если ключ не существует.Ключ $ получается при разборе URL (например, http://localhost/aKeYCoDE/):

<?php
if (!key_exists($key)){
    header('HTTP/1.0 404 Not Found');
    exit;
}
?>

Я ожидаю, что он будет перенаправлен на мою страницу 404.

ОБНОВЛЕНИЕ:

Это определенно кое-что о том, что я звоню 404 со страницы, которая была переписана (/index.php). Если я создаю фиктивную страницу: /redirect.php, а затем ничего не делаю, только выдаю 404 изтам я получаю свою пользовательскую страницу 404. Но если я напишу для нее правило mod_rewrite и попытаюсь получить к нему доступ таким образом, я получу страницу ошибки по умолчанию 404.

1 Ответ

2 голосов
/ 25 сентября 2011

Я нашел ответ - проблема заключалась в моем предположении, что заголовок 404 из php перенаправит на страницу 404. Это было неправильно. Сервер Apache может выдать 404 для страниц, которые не существуют, но для страниц, которые существуют, то есть обслуживаются страницей php, ответ 404 отправляется в браузер.

В этой теме была похожая проблема: http://www.webmasterworld.com/forum88/10955.htm

Чтобы заставить php делать то, что я хочу (выдать 404, когда ключ не существует), мне нужно добавить страницу 404 из php:

<?php
if (!key_exists($key)){
    include($_SERVER["DOCUMENT_ROOT"]."/errors/404.php");
    exit;
}
?>
...