ЧПУ (Интернет) | это... Что такое ЧПУ (Интернет)? (original) (raw)
У этого термина существуют и другие значения, см. ЧПУ (значения).
ЧПУ (англ. Friendly URL[источник не указан 503 дня]) — веб-адреса, удобные для восприятия человеком (а также систем и методов построения таких адресов).[источник не указан 503 дня] Является аббревиатурой от словосочетания «человекопонятный урл» (где «урл» — жаргонное обозначение URL).[источник не указан 503 дня]
Содержание
- 1 Передача параметров через GET
- 2 Концепция ЧПУ
- 3 Реализация
- 4 Случаи, когда введение ЧПУ не оправдано
- 5 Примечания
- 6 Ссылки
Передача параметров через GET
Во многих CMS, вроде Joomla и им подобных каждой странице соответствует целочисленный идентификатор — номер записи в базе данных. Это число передаётся веб-серверу в явном виде через GET-запрос (то, что идёт в URL после вопросительного знака), в виде:
/articles.php?id=148
Также могут передаваться другие параметры:
/articles.php?tag=summer&action=list
— просмотр списка статей с меткой summer (лето)./news.php?topic=4&year=2003&month=10
— новости по теме 4 (спорт) за октябрь 2003./catalogue.php?sect=11&kind=6&manuf=63
— товары производителя 63 (производитель «GE») типа 6 (лампочки) в отделе 11 (отдел «свет»).
Это вполне понятно и естественно для разработчиков и программ, но не совсем понятно и удобно для посетителей. Даже если числовые идентификаторы полностью заменить на человеческие слова, то адрес всё равно останется очень громоздким. А когда параметров много и у них длинные названия, то URL может не помещаться полностью в адресную строку, создавая дополнительные неудобства. В итоге URL становится непригодным для человека.
Также адреса часто становятся привязанными к технической реализации (например, видны адреса обрабатывающих запросы скриптов).
Концепция ЧПУ
Концепция ЧПУ предполагает максимально лаконичные и интуитивно понятные адреса, которые показывают естественную для человека логическую структуру данных на сервере, а не её программный интерфейс с модулями и параметрами. Структуру обычно представляют в виде иерархии как в обычной файловой системе, к которой привык пользователь.
Те же самые примеры, но с ЧПУ будут выглядеть уже так:
/articles/tags/summer/
— статьи по меткам, метка summer (лето)./news/sport/2003/10/
— новости спорта, 2003 год, октябрь./catalogue/light/bulbs/GE/
— каталог товаров, отдел «Свет», лампочки, производитель GE.
Или, даже так:
/статьи/метки/лето/
— статьи по меткам, метка summer (лето)./новости/спорт/2003/10/
— новости спорта, 2003 год, октябрь./каталог/свет/лампочки/GE/
— каталог товаров, отдел «Свет», лампочки, производитель GE.
Но использование кириллицы в адресе затрудняется тем, что в URL все символы, отличные от ограниченного набора из ASCII‐символов, должны преобразовываться в специальную форму, к примеру:
http://ru.wikipedia.org/wiki/Микрокредит
кодируется как:
http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D1%80%D0%B5%D0%B4%D0%B8%D1%82
Преимущества и недостатки
Достоинства ЧПУ для посетителя очевидны:
- подобные адреса очень легко запомнить;
- можно продиктовать URL по телефону;
- подобные URL, как правило, позволяют пользователю даже не глядя на страницу, сразу понять, где он сейчас находится, и как следствие, помогают лучше разобраться в структуре сайта.
- чтобы перейти вверх по иерархии, достаточно стереть ненужную часть пути;
- если человек уже был на вашем сайте и набирает адрес вручную, то он сразу может обратиться к нужному ему документу, глядя на URL’ы предыдущих запросов.
Недостатки:
- увеличение затрат ресурсов сервера для большинства реализаций;
- усложнение настройки сайта в связи с необходимостью вмешиваться в конфигурационные файлы веб-сервера.
Реализация
Apache
Для веб-сервера Apache существует мощный модуль mod_rewrite, который включается в стандартный дистрибутив. Он обладает массой возможностей интерпретации URL перед обработкой необходимым модулем.
В большинстве случаев в файле .htaccess указывается с помощью регулярного выражения формат URL (без списка параметров и без имени домена и без ведущего разделителя '/'), который должен быть обработан как другой URL. Например:
RewriteEngine on RewriteRule ^article/([0-9]+)/? article.php?id=$1 [L]
Первая строчка включает mod_rewrite. Во второй указывается, что веб-сервер при запросе URL вида /article/450/
должен обратиться к /article.php?id=450
.
Обработка URL в собственном скрипте
Разработчик может вручную обработать URL и на основе него вызвать какую-то функцию. Для этого, чаще всего, нужно с помощью mod_rewrite направить все запросы одному скрипту для обработки. Для этого нужно добавить в файл .htaccess следующее содержимое:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA]
Скрипт index.php
уже будет брать URL из переменной REQUEST_URI
(в PHP из $_SERVER['REQUEST_URI']
) и на основе каких-то настроек запускать необходимый код.
Веб-framework
В большинстве инструментариев для создания сайта, таких как CodeIgniter, Django, Ruby on Rails или Zend Framework, веб-сервер не обращается напрямую к скрипту через URL (как, например, в чистом PHP), а в специальном файле настроек указывается связь нужного метода для вывода страницы с шаблоном URL.
Для задачи шаблона URL используется либо регулярные выражения, либо специальный язык.
Например, в RubyOnRails:
ActionController::Routing::Routes.draw do |map| map.connect 'users', :controller => 'user', :action => 'list' map.connect 'users/:id', :controller => 'user', :action => 'show' end
Строка 'users/:id'
указывает на любые URL вида /users/1
или /users/login
. Когда посетитель запросит такой адрес, то будет вызван метод show()
класса _User_Controller
, а номер, которым заменил :id
(в этом примере это 1 или login) будет передан как параметр. Собственно, при запросе страницы /users/
будет вызван метод list()
того же класса, но уже без параметров.
В некоторых веб инструментариях (например, Ramaze написанном на Ruby) связь URL и метода класса определяется названием и количеством аргументов метода.
Например, если у нас есть класс:
class CommentsController < Ramaze::Controller def index # Создание списка комментариев end
def show(id) # Вывод комментария с нужным ID end end
То чтобы вывести комментарий по ID равным 5 мы должны открыть URL /comments/show/5/
, то есть URL становится вида /_класс_/_метод_/_первый аргумент_/_второй аргумент_/
. Конечно же обратиться мы можем только к классам, которые являются контроллерами, то есть к тем классам, для которых мы специально указали, что они должны обслуживать посетителей.
Случаи, когда введение ЧПУ не оправдано
- В случаях, когда адрес не виден пользователю (например, AJAX), так как ресурсы сервера будут неоправданно тратиться на разбор URL.
- Если страница предусмотрена для просмотра ограниченным количеством пользователей (например, страницы администрирования, C-панели) и не предусматривается посещение страницы поисковыми ботами.
- Если посещение страницы предполагает обязательное использование введённых параметров (например, формы регистрации, данные для вычисления скриптом и т. п.)
Примечания
Ссылки
- «§ 48. Боремся за чистоту URL», Артемий Лебедев, «ру/Ководство», 23 марта 2000
- «§ 49. Дублирующая навигация», Артемий Лебедев, «ру/Ководство», 22 апреля 2000