PHP в деталях

       

Сервер ищет файл с тем же именем


Оказывается, достаточно прописать в установках директории (httpd.conf или .htaccess) строку

Options Multiviews

или, если директива Options уже есть, добавить MultiViews к ней. Тогда если пользователь набирает "/foo/bar", сервер будет искать файл с именем "foo" и с любым расширением. Найденный с наибольшим совпадением (вот это для меня загадка) файл он обработает с его типом mime, то есть если есть news.php, а набран адрес news/, то сервер отдаст адрес на обработку php. Если это картинка, то сервер отдаст ее броузеру именно как картинку (послав соотвествующий заголовок content-type). А в news.php разбираем $REQUEST_URI. Например, если новости выводятся целой лентой, либо за определенную дату, разбор можно сделать таким:

/* Первый вариант ? когда набран адрес типа "/news/010120", возможно с дробью на конце. Символы ^ и $ здесь обозначают привязку к началу и концу строки. Подстрока [0-9]{6} означает 6 цифр (если у вас новости могут быть датированы 1999-м годом и раньше, используйте адреса с полным форматом года и 8 цифр вместо 6). */

if (ereg("^/news/([0-9]{6})$", $REQUEST_URI, $match) ereg("^/news/([0-9]{6})/$", $REQUEST_URI, $match)) {

  }

/* второй вариант ? набран адрес просто "/news" или "/news/" */

elseif (ereg("^/news/$", $REQUEST_URI) ereg("^/news$", $REQUEST_URI)) {

  }

/* запросы ко всем остальным адресам (в этом файле) считаются попытками взлома сайта =) */

else

  die ("Error 404 Not found");

То же самое можно сделать, например, с каталогом продукции фирмы ? вынести все это дело в отдельный файл catalogue.php, а адреса сделать вида "/catalogue/rubrik1/rubrik2/rubrik3". При этом в файле catalogue.php начало строки будет откусываться, а дальше можно обработать по принципу, описанному в предыдущем выпуске. Остальное же можно отправить, опять же, в ErrorDocument.



Содержание раздела