ЧПУ (Интернет)

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Полнотекстовые веб-адреса»)
Перейти к: навигация, поиск


ЧПУ (аббревиатура от «Человеку Понятный Урл», где «урл» — жаргонное название URL) — веб-адреса, удобные для восприятия человеком (а также систем и методов построения таких адресов).[источник не указан 1222 дня]

Передача параметров через 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’ы предыдущих запросов.

Недостатки:

  • увеличение затрат ресурсов сервера для большинства реализаций;
  • усложнение настройки сайта в связи с необходимостью вмешиваться в конфигурационные файлы веб-сервера.

Реализация[править | править вики-текст]

IIS[править | править вики-текст]

Для выполнения задач интерпретации URL в веб-сервере IIS существует несколько различных модулей, один из которых создан непосредственно компанией Microsoft и является бесплатным. Это модуль переопределения URL-адресов (URLRewriter) 2.0 (Майкрософт) для IIS 7.

Описание модуля с сайта Microsoft:

Модуль переопределения URL-адресов 2 для IIS является очередным выпуском продукта, включающим все возможности версии 1.1, а также поддержку переопределения исходящих ответов. Вот список задач, которые можно выполнять с помощью данного модуля:

  • Реализация сложной логики переопределения URL-адресов за счет применения пользовательских поставщиков переопределения, написанных с использованием .NET.
  • Замена URL-адресов, созданных веб-приложением в HTML-ответе , более понятными для пользователя и поисковой системы эквивалентами.
  • Исправление содержимого любого HTTP-ответа с использованием сопоставления шаблонов регулярных выражений.
  • Изменение заголовков HTTP-запросов и переменных сервера IIS.
  • Изменение заголовков HTTP-ответов.

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_URIPHP из $_SERVER['REQUEST_URI']) и на основе каких-то настроек запускать необходимый код[1].

Веб-framework[править | править вики-текст]

В большинстве инструментариев для создания сайта, таких, как CodeIgniter, Django, Ruby on Rails или Zend Framework, веб-сервер не обращается напрямую к скрипту через URL (как, например, в чистом PHP), а в специальном файле настроек указывается связь нужного метода для вывода страницы с шаблоном URL.

Для задачи шаблона URL используются либо регулярные выражения, либо специальный язык.

Например, в Ruby on Rails:

Rails::Application.routes.draw do
  get 'users', to: 'users#index'
  get 'users/:id', to: 'users#show'
end

Строка 'users/:id' указывает на любые URL вида /users/1 или /users/login. Когда посетитель запросит такой адрес, то будет вызван метод show класса UsersController, а номер, которым заменил :id (в этом примере это 1 или login) будет передан как параметр. Собственно, при запросе страницы /users/ будет вызван метод index того же класса, но уже без параметров.

В некоторых веб-инструментариях (например, 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-панели) и не предусматривается посещение страницы поисковыми ботами.
  • Если посещение страницы предполагает обязательное использование введённых параметров (например, формы регистрации, данные для вычисления скриптом и т. п.)

Примечания[править | править вики-текст]

Ссылки[править | править вики-текст]