ЧПУ-ПУ-ПУ

Или вот допустим ЧПУ. Человекопонятные URL. Есть URL: www.site.com/news.php?action=archive&year=2009&month=2.
Он человеконепонятный и человеконенавистнеческий.
А вот так понятный: www.site.com/news/archive/2009/02/. Всем видно — это архив новостей за февраль 2009. Более того, если стереть 02, получим архив за весь 2009, сотрём его, получим полный архив, сотрём и archive — окажемся в корне раздела новостей, добавим в конце 27, получим список новостей за день.

Не будем разбираться в том, всегда ли палочки понятнее вопросиков, кто будет стирать что-то в адресной строке и кто туда вообще смотрит. Просто примем за факт, что это последний писк моды.

Для многих известных форумов (phpBB, smf) есть плагины реализующие ЧПУ. Форумы старенькие, урлы у них страшненькие, поэтому с адаптацией приходится повозиться.

Реализуют обычно через mod_rewrite. То есть, есть вот изначальный набор страниц со старыми адресами, а есть те же страницы с новыми человекопонятными. И чтобы старые страницы откликались на новые адреса нужно их всех корректно за модрерайтить. Различных адресов много и все с кучей GET-параметров. Поэтому в .htaccess образуется ограмадное месиво из регулярок. С регуляркой и одной то не всегда легко разобраться, а с двадцатью килобайтами их вообще смерти подобно.

И вот те, кто таки сумел перевести какой-нибудь форум на ЧПУ становятся Великими Гуру Регулярок. Потом приходят благодарные потомки и на проделанной работе начинают учиться, как же всё таки делать ЧПУ.

Отлично! И вот потом все эти люди начинают делать свои проекты. И конечно же с ЧПУ, куда без него!

И что большинство из них делает? Делает всё тоже самое. Страницы с GET-параметрами в две строки и громоздкий htaccess преобразующий ссылки вида /news/archive/2009/20/ в index.php?module=news&actiov=archive&year=2009&month=2.

Нахуя?! Зачем? Вы же не костыли выстругиваете, чтобы какое-то здоровенное старьё на новые веянья натянуть. С нуля же делаете.

— А что делать? — спрашивают некоторые, — нам же нужны параметры. Откуда нам их ещё взять?

Но ведь эти параметры не с неба свалились. Вы их только что модрерайтом на основании URL генерировали. Вот этот URL и есть ваш параметр. Выделили несколько папочек под картинки и стили, а все остальные запросы валите в один сценарий.

RewriteEngine on
 
RewriteCond %{REQUEST_URI} ^/(i|css|js)/.*
RewriteRule . - [L]
 
RewriteRule (.*) index.php [L]

В index.php взяли /news/archive/2009/20/ и поделили по слешу на компоненты. Глядь — первый компонент news и передаём управление модулю новостей (или как там у вас устроено). Уже модуль смотрит — следующий компонент archive, значит архив выводить надо. Осталось ещё два компонента, значит это год и месяц.

  1. Вместо того чтобы держать в голове две системы именования, держим одну, человекопонятную.
  2. Разруливание всех запросов идёт за один проход, а не за два (mod_rewrite + потом всё равно параметры разбирать).
  3. Обработка параметров не свалена в один огромный файл, а ведётся по частям, каждая в своём модуле.
  4. И ведётся она нормальным программным кодом, который всяко удобнее и понятнее апачевских директив.

13 комментариев »

  • Все верно сказано, так и надо делать!

    adw0rd, 27.02.2009, 15:13

  • Я рад, что ты со мной :)

    vasa_c, 27.02.2009, 15:33

  • «/news/archive/2009/20/» уууууу 20 месяц?)))

    adw0rd, 27.02.2009, 23:02

  • Решил перечитать ещё раз, предельно внимательно? :)

    vasa_c, 28.02.2009, 13:36

  • Ога +1
    Этот подход+goDB+фраза»Че за х*ня?» это самые важные вещи, которые я у тебя с… т.е. До чего я дошел своим умом, когда работали вместе над москварой конечно. :)

    dAllonE, 3.03.2009, 15:50

  • Спасибо, Далоша, твоя поддержка много значит для меня :)

    vasa_c, 3.03.2009, 18:40

  • У тебя камменты сливаются… сделай чередование фоновых цветов или бордером раздели…

    adw0rd, 3.03.2009, 19:03

  • Благодарю за статью. Удачи Вам!

    Компьютерщик, 11.04.2009, 5:51

  • там с артедоо раздули за програмеро понятный ЧПУ без ебаных 20 кб текста в хтаккессе. можно юзать в принципе, к тому же это обратимая вещь получилась, так что имеет право на жизнь

    phpdude, 4.06.2009, 13:56

  • >там с артедоо раздули
    где там? : )

    vasa_c, 4.06.2009, 15:59

  • http://pyha.ru/forum/topic/2392.0

    phpdude, 18.10.2009, 14:33

  • Хорошая информация, для проектировщиков сайтов то что нужно

    Андрей, 20.04.2011, 20:36

  • Спасибо за информацию, надеюсь не пригодиться…
    Как сюда попала не помню, кажется оттуда http://www.php.ru/forum/viewtopic.php?t=790
    пытаюсь столкнуть вот эту лабуду http://www.plati.ru/asp/pay.asp?idd=1168117 только с сайта, ибо на плати.ру такое никому не интересно =) ботаны себе сами всё напишут
    и где то я видела уже ваш ник …

    Vasiliya, 25.07.2011, 22:18

Leave a comment