ЧПУ и PHP


Прислал: Дмитрий Смирнов [ 27.10.2000 @ 11:21 ]
Раздел:: [ Статьи по PHP ]


"Spectator, кстати... а вот ссылки типа //spectator.novocybersk.ru/issues/160 это мне нравится, ОЧЕНЬ ;))) Напиши в следующей заметке, поподробнее, КАК ты это сделал ? ОК ?"
- такой отзыв пришел на предыдущую заметку - я впервые сделал на "Спектаторе" ЧПУ, начиная именно со 160 заметки. Итак, расскажу про ЧПУ и PHP. Если вы не знаете PHP, и не знаете, какие иногда страшные УРЛы бывают в результате его работы - дальше можно не читать. :)

ЧПУ - это термин, придуманный командой НовоКиберска, обозначает он "Человекопонятный УРЛ". В принципе, ничего нового и оригинального в идее понятного УРЛа нет. Про это писал и Лебедев ( http://webscript.ru///www.design.ru/kovodstvo/paragraphs/48.html ), и другие дизайнеры ( http://webscript.ru///ddd.deusexmachina.ru:8101/web/address_nav/ ). Вообще, мне всегда нравились ЧПУ на таких сайтах, как, например, CGI-Resources ( http://webscript.ru///cgi.resourceindex.com/Programs_and_Scripts/ ) или Softseek ( http://webscript.ru///www.softseek.com ).

В общем, когда я перевел "Спектатора" на PHP, начались наезды на, мол, адреса у тебя не совсем удобны. Для тех, кто не знает, заметка 161 имела (бы) такой УРЛ: //spectator.novocybersk.ru/index.php3?161. Теперь имеет такой: //spectator.novocybersk.ru/issues/161. Вроде бы, стало лучше. Как это делается?.. Рассказываю по просьбам читателей, ботающих на Php.

Вообще, самая первая мысль - это создавать для каждой заметки поддиректорию с соответствующим номером в директории issues и помещать в нее index.html, то есть сделать так, чтобы по адресу //spectator.novocybersk.ru/issues/161 лежал бы реальный файл. Разумеется, так дело не пойдет ;(

Вторая идея - прописать в фале .htaccess страницу, которая будет выдаваться при ошибке 404.

То есть:

------------------------------------

ErrorDocument 404 /index.php3

ErrorDocument 401 /index.php3

------------------------------------

Грубо говоря, пользователь набирает //spectator.novocybersk.ru/issues/161, такая страница не найдена, и загружается файл index.php3. Дальше - все просто. Переменная $REQUEST_URI дает нам адрес вызываемой страницы (в данном случае это будет /issues/161), вывести на экран соответствующий файл - дело техники.

Ан нет. Хорошая идея, а не работает. IE ни в какую не хочет показывать то, что надо, а вместо этого пихает свою стандартную страницу "404" с кучей текста. Тут я и остановился. Не то, чтобы застрял, просто лень было копать дальше.

А на самом деле решалось все просто. Надо, чтобы страница, которая грузится в случае ошибки 404, изменяла бы код ошибки и сигналила, мол, мужик, все ОК, есть такая страница: <?php header("http2/1.0 200 Ok"); ?>

Итого: прописываем в .htaccess страницу, которая, собственно, за все отвечает (у меня это index.php3). В этой странице пишем php-скрипт, который работает с $REQUEST_URI, шлет заголовок "http2/1.0 200 Ok" и отображает то, что надо.

Пример:

<?php header("http2/1.0 200 Ok");

$num=$REQUEST_URI;

$num = eregi_replace ( "/issues/", "", $num );

include ($num.".txt"); ?>

P.s. Вот еще один способ сделать это по-другому ( http://webscript.ru///www.phpbuilder.com/columns/tim19990117.php3 ), а вот еще один ( http://webscript.ru///www.sabren.com/code/php/snurk/ ).
---------------------------------
Дмитрий Смирнов( mailto:spectator@novocybersk.ru )
Spectator ( http://webscript.ru///spectator.ru/ )