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