Мой .htaccess перенаправляет все запросы в /word_here
на /page.php?name=word_here
. Затем скрипт PHP проверяет, находится ли запрашиваемая страница в своем массиве страниц.
Если нет, то как я могу имитировать ошибку 404? Я пробовал это, но это не сработало:
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
Правильно ли я считаю, что неправильно перенаправлять мою страницу с ошибкой 404?
Обновленный ответ ( http_response_code
с PHP 5.4) для генерации 404 страниц в PHP – это использование http_response_code
:
<?php http_response_code(404); include('my_404.php'); // provide your own HTML for the error page die();
в<?php http_response_code(404); include('my_404.php'); // provide your own HTML for the error page die();
die()
не является строго необходимым, но он гарантирует, что вы не продолжите нормальное выполнение.
То, что вы делаете, будет работать, и браузер получит код 404. То, что он не сделает, – это отобразить страницу «не найден», которую вы ожидаете, например:
Запрошенный URL /test.php не найден на этом сервере.
Это связано с тем, что веб-сервер не отправляет эту страницу, когда PHP возвращает код 404 (по крайней мере, Apache). PHP отвечает за отправку всего собственного вывода. Поэтому, если вам нужна подобная страница, вам нужно будет отправить HTML самостоятельно, например:
<?php header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404); include("notFound.php"); ?>
в<?php header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404); include("notFound.php"); ?>
Вы можете настроить Apache на использование одной и той же страницы для своих 404 сообщений, поставив это в httpd.conf:
ErrorDocument 404 /notFound.php
Попробуй это:
<?php header("HTTP/1.0 404 Not Found"); ?>
Создавать собственные страницы ошибок через файл .htaccess
1. 404 – страница не найдена
RewriteEngine On ErrorDocument 404 /404.html
2. 500 – Внутренняя ошибка сервера
RewriteEngine On ErrorDocument 500 /500.html
3. 403 – Запрещено
RewriteEngine On ErrorDocument 403 /403.html
4. 400 – Плохой запрос
RewriteEngine On ErrorDocument 400 /400.html
5. 401 – Требуется авторизация
RewriteEngine On ErrorDocument 401 /401.html
Вы также можете перенаправить всю ошибку на одну страницу. как
RewriteEngine On ErrorDocument 404 /404.html ErrorDocument 500 /404.html ErrorDocument 403 /404.html ErrorDocument 400 /404.html ErrorDocument 401 /401.html
Вы помните, чтобы умереть () после отправки заголовка? Заголовок 404 автоматически не прекращает обработку, поэтому может показаться, что ничего не произошло, если происходит дальнейшая обработка.
Неправильно REDIRECT на вашу страницу 404, но вы можете ВКЛЮЧАТЬ контент от него без проблем. Таким образом, у вас есть страница, которая правильно отправляет статус 404 с правильного URL-адреса, но у вас также есть «что вы ищете?». страница для читателя.