Пожалуйста, скажите мне, почему это не работает. Он работал, но необъяснимо решил прекратить работать. В php я выдаю 404, если страница не найдена так.
if(checkPageExists($escaped_url_page_name)){ header('HTTP/1.1: 200 OK'); }else{ header("HTTP/1.0 404 Not Found"); die; }
Мой htaccess
php_flag magic_quotes_gpc Off RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/$1 [L] ErrorDocument 404 /404.php
Страница 404 находится на корне и называется 404.php. Почему это не работает, когда пять минут назад это было, и ничего не изменилось. Я тестировал страницу со скрипачом, и это действительно бросает 404, но перенаправления не происходит. У меня есть дружественные URL-адреса, но я не думаю, что это влияет на него, так как «/» в htaccess относится к физическому корню сайта, который я думал. Заранее спасибо.
Однажды у меня была аналогичная проблема – когда PHP выдает заголовок 404, Apache обычно не делает для него 404 страницы. (Edit: Вероятно, это связано с тем, выводит ли PHP какой-либо текст. Я не очень много экспериментировал с ним.) Если вы проверяете заголовки в своем браузере, вы можете видеть, что заголовок 404 работал, даже если страница пуста ,
Я не уверен в автоматическом решении, но я только что сделал функцию http_error($code)
которая печатает мою собственную страницу ошибок и вызвала ее вместе с header()
когда мой код вручную запускал 404. Затем я связал немного кода к ErrorDocument
который вызывает только http_error
:
ErrorDocument 404 index.php?http_error=404 ErrorDocument 403 index.php?http_error=403
…и так далее.