августа 10, 2010 | by Макс | ЧПУ – Человеко-Понятные УРЛ. Все знают, насколько отличается мозг компьютера от мозга человека. Если компьютеру проще понять цифры (ID), то человеку – буквы и картинки. Также для человека неестественны GET-параметры в строке браузера, его глазу нужны естественные пути, такие, как в его любимом Windows. domain. ru? category=122&page=222 – такой вид УРЛ неестественен для человека. domain. ru/122/222.html – вот это другое дело. ЧПУ реализуется посредством технологии mode_rewrite (если мы имеем дело с вебсервером Apache). В файл. htaccess, находящийся в корне сайта, вписывается регулярное выражение, которое преобразовывает содержимое адресной строки браузера клиента в GET-запрос.
Например: RewriteEngine On RewriteRule ^([^/]*)/([^/]*)\.html$ /?category=$1&page=$2 [L] Такое регулярное выражение преобразовывет “/category/334.html” в понятный компьютеру формат (GET) – “?category=category&page=334″. Скрипты принимают и обрабатывают уже понятный ему запрос ($_GET[’var’]). Почти все книги и мануалы учат обрабатывать запросы именно в. haccess (разделять на GET переменные). Я же считаю, что наиболее удобно и гибко будет передавать человекоподобный запрос какому-либо скрипту (ядру системы) целиком, а уже в скрипте разбирать его по крупицам. Например: DirectoryIndex control. php RewriteEngine On Options +FollowSymlinks RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.+) /control. php? do=$1 [L] Этот обработчик в. htaccess посылает всю правую часть УРЛ скрипту control. php. Нужный нам запрос хранится в $_GET[’do’]. Уже внутри скрипта должно происходить разбиение этого запроса на частицы и подключение тех или иных модулей. Вот пример содержания control. php: $do = $_GET['do']; $do = explode(‘/’, $do); print_r($do); //все необходимые данные содержатся в массиве $do, //этот массив заменяет нашему человекопонятному сайту //нечеловекопонятный $_GET. ?> Теперь скрипт (control. php) может разбить запрос “/films/235/” на отдельные, понятные ему частичики. Теперь он знает, что клиент требует отдать ему некий фильм под ID=235. Апач не ищет папку “/fimls/235/”, он следует условию в. htaccess и передает полное УРЛ файлу control. php GET запросом. Тот, в свою очередь, разделяет запрос на слеши (explode), подключает нужные модули и формирует выдачу в браузер. Можно сделать УРЛ еще более человекопонятным и передавать название в транслите, а не ID нужного фильма. Соответственно, control. php будет производить выборку из базы уже исходя не из ID, а из названия. В любом случае, определить то, что нужно посетителю, ему не составит особого труда. По-моему, второй способ (обработка в PHP скрипте) в разы проще, удобней и универсальней, чем первый (обработка в. htaccess). h++p://php. name/php/krasivye-ssylki-chpu/ Теги: php