Apache .htaccess: ErrorDocument и RewriteEngine не работают вместе - PullRequest
3 голосов
/ 17 марта 2010

Пожалуйста, обратите внимание на следующее .htaccess

ErrorDocument 404 /404/

RewriteEngine On
RewriteRule (.*) index.php [L]

При этой настройке я использую header('HTTP/1.1 404 Not Found'); в PHP, чтобы перенаправить на страницу обработки ошибок и отправить соответствующий код состояния HTTP. Отправляется правильный код состояния 404, но браузер показывает пустую страницу, а в журнале доступа отображается "GET /invalid-url/ HTTP/1.1" 404 -

Может кто-нибудь сказать мне, как заставить ErrorDocument работать с перезаписью Apache URL?

Ответы [ 4 ]

5 голосов
/ 17 марта 2010

Да, объявить документ 404 после правил перезаписи

Это нормально, что ваш сервер не выдает ошибку 404, вы используете регулярное выражение перехвата ((. *)) В качестве единственного правила перезаписи.

Но ваша проблема на самом деле не связана с htaccess. В php, если вы отправляете заголовок 404, браузер не будет перенаправлен на страницу 404 автоматически, но вам придется самостоятельно обрабатывать содержимое страницы с ошибкой в ​​PHP, как это делается в большинстве сред с внутренней системой маршрутизации.

1 голос
/ 19 марта 2010

Я предполагаю, что ответ на мой вопрос: мне не нужно. То, что я пытался сделать, было "перенаправлением 404". То есть при запросе недействительного URL-адреса перенаправьте его на документ 404 вместе с установкой заголовка «Status 404 Not found». И я не уверен, что это то, что я хочу, потому что недействительные URL должны быть помечены кодом статуса 404. Не перенаправлены.

0 голосов
/ 17 марта 2010

Попробуйте это


ErrorDocument 404 /404.html

RewriteEngine On
RewriteRule (.*) index.php [L]

0 голосов
/ 17 марта 2010

Должно работать, если вы определили переписать до ErrorDocument.

...