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

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

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

Содержание

[править] Передача параметров через GET

Во многих CMS, вроде Joomla и им подобных каждой странице соответствует целочисленный идентификатор — номер записи в базе данных. Это число передаётся веб-серверу в явном виде через GET-запрос (то, что идёт в 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_URIPHP из $_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() класса UserController, а номер, которым заменил :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 становится вида /класс/метод/первый аргумент/второй аргумент/ . Конечно же обратиться мы можем только к классам, которые являются контроллерами, то есть к тем классам, для которых мы специально указали, что они должны обслуживать посетителей.

[править] Случаи, когда введение ЧПУ не оправдано

[править] Примечания

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

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Участие
Печать/экспорт
Инструменты
На других языках