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

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

ЧПУ (Человеко-понятный урл) — жаргонное название веб-адреса, содержащего читаемые слова, а не аббревиатуры или идентификаторы базы данных, написанные латинским алфавитом, отражающее вложенность директорий и название элемента. Часто имеет следующий вид /web/masters/master/. Компания «Google» подобные адреса называет «простыми»[1].

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

В системах управления содержимым используются базы данных, где страницы хранятся как текст, отмеченный уникальным идентификатором, по которому и происходит запрос, а за ним и поиск. Такой идентификатор может передаваться веб-серверу явно через GET-запрос (например /index.php?id=1337). Помимо идентификатора могут передаваться и другие настройки, например, формат отображения; указание на мобильное отображение сайта; формат запрашиваемого содержимого (pdf, rtf, html, plain); смещение в списке элементов и другие.

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

Указанные неудобства делают непригодными для употребления URL с GET параметрами. Для решения подобной проблемы разработчики стараются не использовать такие параметры, либо вместо идентификатора выдавать понятное для человека название. Таким образом страница с адресом /index.php?id=1337 превращается в /Бетмен (супергерой). Другие параметры тоже могут быть немаловажными, к примеру, создавая видимость подкаталогов (по аналогии с файловой системой в операционных системах), превращая страницу /index.php?id=322&offset=15 в /молотки/15.

Концепция «понятных» URL[править | править вики-текст]

Как указано выше, человекопонятные URL предполагают сокращение адресов страниц до максимально лаконичных и понятных. Они создают подобие естественной для человека логической структуры данных на сервере, представляя её в виде иерархичной (древовидной) структуры, аналогично файловой системе.

Проблемы кириллицы в адресе[править | править вики-текст]

Адресация в интернете устроена так, что все символы берутся из набора ASCII-символов, где не предусмотрена кириллица. По этой причине они шифруются специальным кодом (включая пробелы) вида: %D0%9B (соответствует букве «Л»). Так, например, «Лук» превратится в %D0%9B%D1%83%D0%BA.

Преимущества концепции[править | править вики-текст]

Такие адреса удобней прочитать, понять и воспроизвести. К тому же это помогает ориентироваться в логической структуре сайта, лишь взглянув на вложенность каталогов. Не обязательно переходить на страницу, чтобы узнать, что на ней размещено. В некоторых случаях для того, чтобы пройти на родительские каталоги, необходимо всего лишь стереть до нужного места адрес, а чтобы перейти на главную страницу, стирается всё, кроме доменного имени.

Такие адреса демонстрируются поисковыми системами прямо в поисковой выдаче[2], в том числе по этим адресам происходит поиск ключевых слов.

Недостатки концепции[править | править вики-текст]

Для одной только настройки такой системы необходимо настраивать как сервер, так и программное обеспечение сайта. Это приведёт к неизбежному увеличению затрат ресурсов первого.

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

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

На сервере IIS такая функциональность реализуется бесплатным модулем «URLRewriter». В то же время для сервера Apache существует модуль «mod_rewrite», который настраивается через файл .htaccess.

Например, указав следующий код, веб-мастер сможет в PHP через массив $_SERVER['REQUEST_URI'] получать все переданные параметры, а точкой входа по любому запросу будет index.php[3].

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

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

Например, в Ruby on Rails, чтобы указать, что при вызове /users/login будет вызываться метод show класса users, а в случае /users/ метод index класса users будет следующий код:

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

В некоторых веб-инструментах подобные конструкции указывать не требуется, и все адреса зависят от метода класса и определяются его названием и количеством аргументов.

Например, так действует Ramaze. При вызове show/id/, где id — переменная (при этом класс обязательно должен быть контроллером):

class CommentsController < Ramaze::Controller
	def index
		# Создание списка комментариев
	end

	def show(id)
		# Вывод комментария с нужным ID
	end
end

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

  • В случаях, когда адрес не виден пользователю (например, AJAX), так как ресурсы сервера будут неоправданно тратиться на разбор URL.
  • Если страница предусмотрена для просмотра ограниченным количеством пользователей (например, страницы администрирования, C-панели) и не предусматривается посещение страницы поисковыми ботами.
  • Если посещение страницы предполагает обязательное использование введённых параметров (например, формы регистрации, данные для вычисления скриптом и т. п.).

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

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