Задача такая.Имеется cgi-скрипт вида /cgi-bin/index.cgi?page=pagename . Получая различные значения
параметра "page" скрипт генерирует различный контент (не суть важно). Нужно
сделать так чтобы при получении некорректного значение "page" скрипт генерировал ошибку
Error 404 (указанный url не существует). Понятно, что сообщить об этом пользователю просто - достаточно вывести на экран средствами скрипта соответствующий текст
"Error 404" и пользователь поймет, что url ошибочный.НО! Как быть если страницу пытается сканировать поисковый робот? Допустим я решил убрать с сайта страницу соответствующую определенному значению "page" и выведу вместо нее страницу с сообщением об 404-ошибке. При этом мне нужно чтобы поисковый робот понял, что такой страницы больше нет и перестал ее индексировать.
Но если скрипт выдаст вместо текста страницы сообщение об 404-ошибке то как
поисковый робот узнает что это ОШИБКА? Ведь для него это будет выглядеть что
скрипт по прежнему нормально работает а на странице просто поменялся текст.
И он будет продолжать ее индексировать.Как правильно сгенерировать cgi-скрипт чтобы сообщить поисковому роботу что данного
url (для опр. значения "page") не существует?
В первой же строке ответа HTTP-сервера должен быть код статуса (см. RFC 2068). В норме - 200, Not Found - 404. Этот код должен возвращать ваш же скрипт. Так что сделайте так, чтобы он при некоторых условиях возвращал 404 и все дела.А писать пользователю Error 404, при этом возвращая статус 200 - это гм... не честно.
Т.е. если я правильно понял, при отображении существующей страницы
скрипт должен например печатать заголовок:print 'Content-Type: text/html; charset=windows-1251; Status: 200 OK \n\n';
а при отображении несуществующей:
print 'Content-Type: text/html; charset=windows-1251; Status: 404 Not found \n\n';
Это правильно?
>Это правильно?Это неправильно.
Признайтесь, вы не читали RFC 2068. Так что процитирую:
6.1 Status-Line
The first line of a Response message is the Status-Line, consisting
of the protocol version followed by a numeric status code and its
associated textual phrase, with each element separated by SP
characters. No CR or LF is allowed except in the final CRLF
sequence.Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
То есть что-то типа:
HTTP/1.1 200 OK
или
HTTP/1.1 404 Not Found
Если интересны подробности, читайте. Останутся вопросы - задавайте.
Вот только вы похоже забыли, что речь идет о cgi скрипте, а не о написании web сервера. Так что такой способ не канает, апач очень удивится увидев такой заголовок и порадует клиента 500 internal server error.Для cgi скриптов предусмотрен заголовок Status, например так:
print "Status: 404 Not Found\n";
print "Content-Type: text/html\n\nSorry";
>апач очень удивится увидев такой заголовок и порадует клиента 500
>internal server error.
>
>Для cgi скриптов предусмотрен заголовок StatusХм... Вы правы. Сейчас проверил на сервере своего хостера - чистый CGI действительно вываливает 500. Это на "домашнем" Апаче у меня mod_perl стоит и "HTTP/1.1 200 OK" кушает и не давится. В общем случае лучше выдавать заголовок Status.