27.9. Адреса поисковых механизмов в Internet
Такие поисковые механизмы, как Google (<http://www.google.com/>) и All the Web (<http://www.alltheweb.com/>), являются попыткой просмотра всей Internet. Они стали существенным ресурсом для пользователей Internet, и любой общедоступный Web-узел только выигрывает от возможности попасть в их список. Поисковые механизмы - это роботы, позволяющие исследовать Web-страницы на Web-узлах, которые индексируют PHP-сценарии аналогично HTML-файлам. Если на странице имеются ссылки, то они отслеживаются и весь Web-узел постепенно становится исследуемым.
К сожалению, многие роботы не отслеживают ссылки, которые содержат переменные метода form. Ссылки, содержащие знаки вопроса, могут привести робот к бесконечному циклу, поэтому они запрограммированы таким образом, чтобы не попадать в такие ситуации. Это является определенной проблемой для Web-узлов, в ссылках которых содержатся переменные метода form. Передача переменных метода form в тегах является естественным для PHP методом обмена данными, но это может закрыть такие Web-страницы для поисковых механизмов. Для того чтобы справиться с этой проблемой, данные должны передаваться в формате, который напоминает обычные URL.
Сначала рассмотрим, каким образом Web-сервер принимает URI и находит соот­ветствующие им файлы. URI представляет собой виртуальный путь, это часть URL, которая следует сразу после имени узла. Он начинается с косой черты, за которой может следовать каталог, другая косая черта и т.д. Так шаг за шагом Web-сервер находит соответствие между каталогами, заданными в URI, и каталогами, имеющимися в файловой системе. Сценарий выполняется, когда он соответствует части URI, даже если за ним следует информация о каталоге. Обычно эта излишняя часть информации о пути отбрасывается, но ею можно воспользоваться.
В листинге 27.9 сценарий работает с Web-сервером Apache, откомпилированным для ОС Unix, и не может работать с другими Web-серверами. Он опирается на переменную среды PATH_INFO, которая в других контекстах не принимается во внимание. Каждый Web-сервер создает уникальный набор переменных среды, хотя есть и некоторые исключения.

| Листинг 27.9. Использование информации о пути
<?php
if(isset($_SERvER['PATH_INFO']))
{
//удалить файлы .html в конце 
$path = str_replace(".html",
"", $_SERVER['PATH_INFO']); //удалить ведущий символ косой черты $path = substr($path, 1); //просмотреть части $pathvar = array(); $v = explodeC'/", $path); $c = count($v); for($i=0; $i<$c; $i += 2)
{
$pathVar[($v[$i])] = $v[$i+1];
}
print^^bi просматриваете сообщение " . "{$pathVar['message']}<br>n"),-
}
// выбрать произвольный идентификатор $nextID = rand(1, 1000);
print("<a href="{$_SERVER["SCRIPT_NAME"]}/message/ $nextID.html">" .
"Просмотр сообщения $nextID</a><br>n");
?>

Получить доступ к программному коду, представленному в листинге 27.9, можно по URL http://localhost/corephp/27-9.php/message/1234.html. В этом случае происходит подключение к локальному серверу, имеющему каталог corephp в корневом каталоге документов. Стандартная инсталляция Web-сервера Apache разместит его в каталоге /usr/local/apcache/htdocs. Сценарий имеет имя 27-9.php, и все, что располагается за именем сценария, затем будет помещено в переменной PATH_INFO. Файл с именем 12 34.html не существует, но для Web-браузера это будет обычным документом HTML. Для поисковой системы это будет представляться аналогичным образом.
В действительности программный код, представленный в листинге 27.9, не делает многого. Он разбивает информацию о пути на части, которые будут использоваться в качестве имени и значения переменной. Сценарий считает message идентификатором. Он может быть ссылкой на запись в реляционной базе данных. Автором был добавлен фрагмент кода, который использует случайное число для создания ссылки на другую воображаемую запись (вспомните доску объявлений (BBS) из главы 23, "Интеграция баз данных"). Это решение можно применить, и каждое сообщение будет одним HTML-файлом.
Автором были представлены только основные принципы этого метода. Но есть "подводные камни" и возможности для его доработки. Следует помнить, что Web-браузеры хорошо работают с относительными URL и что использование информации о пути мешает обрабатывать изображения, которые могут использоваться в ваших сценариях. Поэтому лучше работать с абсолютными путями. Может также понадобиться дать имя PHP-сценарию без расширения. При работе с Web-сервером Apache можно задавать тип документа по умолчанию. Для этого нужно воспользоваться директивой настройки DefaultType или директивой mod_rewrite. По необходимости обратитесь за справкой на Web-узел Web-сервера Apache по адресу <http://www.apache.org/docs/>.