Я искал, много читал, но все равно не мог найти способ, чтобы достичь своей цели. Теперь я даже думаю, что это невозможно. Это?
Я хочу, чтобы 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
основной индекс как обычно.