Показать страницу ошибки 404 с помощью Php

Я сделал пользовательскую страницу ошибки 404 и использовал .htaccess для ее использования, используя: ErrorDocument 404 "error_page.php"

Теперь проблема в том, что у меня есть страница profile.php, где я показываю профили пользователей. Если имя пользователя, указанное в URL-адресе, не существует, я перенаправляюсь на index.php. Вместо этого я хочу показать страницу ошибки 404 с моей пользовательской страницей ошибки. Будет ли этого достаточно, чтобы сделать это эффективно?

header("HTTP/1.1 404 Not Found");
include 'error_page.php';
exit();

Спасибо.


person user2471133    schedule 10.06.2013    source источник
comment
Это будет иметь тот же эффект, что и страница ошибок Apache, однако в журнал ошибок не будет внесена запись. Это может или не может иметь отношение к вам.   -  person Pekka    schedule 10.06.2013
comment
Я хочу иметь такой же эффект, как когда пользователь посещает несуществующую страницу. Как я могу это сделать? т.е. как я могу иметь его в журнале ошибок? Я думал, что показ заголовка также поместит запись в журнал ошибок.   -  person user2471133    schedule 10.06.2013


Ответы (1)


Это должно работать, но вы также можете перенаправить на страницу с ошибкой (но вы потеряете текущий URL-адрес).

header('Location: /error_page.php');
die();

РЕДАКТИРОВАТЬ: Если вы действительно хотите, чтобы это было в журнале ошибок, дешевый (и уродливый) способ - перенаправить на несуществующую страницу:

header('Location: /404'.$_SERVER['REQUEST_URI']);
die();

Таким образом, вы получите журналы с /404/path/to/profile.php?userid=9999, чтобы получить представление о том, что было запрошено.

person Alexandre Danault    schedule 10.06.2013
comment
Я знал об этом, но ошибку 404 поисковикам это не выдаст. а также пользователь не будет знать, что он на самом деле набрал в URL-адресе. - person user2471133; 10.06.2013
comment
Если вы хотите, чтобы поисковая система знала, что это ошибка 404, вы должны поместить header("HTTP/1.1 404 Not Found"); в начало файла error_page.php. - person Alexandre Danault; 10.06.2013
comment
Если вы действительно хотите, чтобы это было в журнале ошибок, предпочтительный способ сделать это — использовать error_log - person nstCactus; 10.06.2013
comment
Итак, код, который я предоставил выше, в порядке? я должен просто добавить к нему функцию error_log? - person user2471133; 10.06.2013
comment
По моему опыту, error_log() работает/не работает в зависимости от того, как вызывается php (SAPI, CGI и т. д.), и в конечном итоге регистрируется в неправильных местах (системный журнал, журнал событий) в зависимости от вашей настройки. Кроме того, формат ведения журнала будет отличаться от реального 404-го, если вы не позаботитесь о том, чтобы ваши записи были точно такими же, как у apache. - person Alexandre Danault; 10.06.2013