Лучший способ справиться с ошибкой 404 с перенаправлением на главную страницу

Я искал, много читал, но все равно не мог найти способ, чтобы достичь своей цели. Теперь я даже думаю, что это невозможно. Это?

Я хочу, чтобы 404 ошибки обрабатывались правильно, поэтому у меня есть ErrorDocument 404 /404.php в файле .htaccess, и я хочу отправить правильный заголовок в заголовок поисковых машин header("HTTP/1.1 404 Not Found") чтобы забыть эту страницу, также я хочу перенаправить моего посетителя на /index.php?code=404 чтобы я мог сообщить ему, что то, что он искал, недоступно, но все равно держите его на сайте.

Теперь кажется, что все в порядке, пока я не хочу перенаправить пользователя: тогда сервер отправляет сообщение 302, которое перезаписывает мой предыдущий заголовок 404, поэтому, когда я могу отправить пользователя в нужное место, я все еще не могу сказать, searchbots, что адрес неверен.

Если я добавлю include("index.php?code=404") после строки заголовка, он просто не будет работать, сервер говорит, что файл не существует.

Что мне делать?

Попробуйте что-то вроде этого:

 <?php header("HTTP/1.0 404 Not Found"); echo '<html> <head> <meta http-equiv="Refresh" content="0;url=http://www.mysite.com/index.php?code=404" /> </head><body></body> </html>'; ?> 

Я использую meta переадресацию, потому что в противном случае вы получите сообщение об ошибке, отправленное заголовками.

Я тестировал это на localhost с помощью Fiddler и получил правильный ответ 404, а затем был правильно перенаправлен на другую страницу успешно.

Еще одно предложение я бы посоветовал модифицировать .htaccess для обработки 404.

добавив что-то вроде:

 ErrorDocument 404 /404.php 

к вашему .htaccess будет обрабатывать вещи очень хорошо для вас.

Вы можете разместить шаблон ошибки 404 в любом месте. Например, вы можете разместить все сообщения об ошибках в папке «ошибки»,

 ErrorDocument 404 /errors/404.php 

Разумеется, хорошо обрабатывает вещи и другие сообщения об ошибках.

Можете ли вы добавить include("index.php") на свою страницу 404 без параметра кода; то внутри вашего index.php есть раздел, который будет проверять URL-адрес текущей страницы. Поэтому, если URL-адрес страницы содержит 404.html , 404.html сообщение об ошибке, в противном случае 404.html основной индекс как обычно.