ЧПУ — Человеко-Понятные УРЛ. Все знают, насколько отличается мозг компьютера от мозга человека. Если компьютеру проще понять цифры (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:

<?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/

Оставьте свой комментарий