Что такое «постоянные ссылки» (permalinks) и зачем они нужны

Jan 03, 2023 01:27

Речь в этом посте пойдет о так называемых «постоянных ссылках», по-английски «permanent links» или сокращенно «permalinks» (в основном используют именно сокращенный вариант).

Когда я в начале нулевых в первый раз услышал этот термин, то удивился, зачем придумывать новое слово, если давным-давно существует понятие «гиперссылка» (или просто «ссылка», так пишут чаще), по-английски «hyperlink» (или просто «link»). В общем, постоянная ссылка и является гиперссылкой (но не всякая гиперссылка признается постоянной ссылкой). «Постоянная ссылка» является более узким понятием, чем «гиперссылка», поэтому в появлении этого нового слова есть определенный смысл.

С другой стороны, на многих сайтах используются постоянные ссылки, но не используется сам термин «постоянная ссылка» (или термин «permalink» на сайтах с англоязычным интерфейсом). Например, одним из таких сайтов является наш ЖЖ («Живой журнал»), его и используем далее в качестве примера использования постоянных ссылок.

Отличие статических сайтов от динамических

Термин «постоянная ссылка» возник при появлении динамических сайтов. На статических сайтах структура гиперссылок более-менее отражает реальное устройство хранения страниц сайта. На статических сайтах гиперссылку можно считать путем к странице сайта или адресом этой страницы. Таким образом, поскольку структура папок статического сайта с самого начала планируется статической (не предназначенной для частого изменения), то ссылки на таких сайтах тоже статические, то есть и являются «постоянными», поэтому отдельного термина для обозначения постоянных ссылок при использовании статических сайтов не требуется.

На динамических сайтах данные хранятся в базах данных, а не в текстовых файлах на языке HTML, как на статических сайтах. Гиперссылки, которые мы видим на динамических сайтах, не отражают реальной структуры папок динамического сайта. Ссылки на динамических сайтах являются просто способом передать веб-приложению наше требование, а веб-приложение возвращает в ответ HTML-страницы, которые формирует тут же, сразу после получения нашего требования, извлекая данные из базы данных.

В принципе, одна из причин создания динамических сайтов - желание владельцев сайтов легко менять внешний вид сайта, а также структуру папок сайта. Этого добились, но при этом потеряли важное полезное свойство статических сайтов - статичность (постоянство) ссылок. Разработчикам и владельцам сайта стало удобнее работать с большими объемами данных (при маленьких объемах данных удобнее использовать статический сайт), зато пользователь сайта пострадал: при сохранении закладки на определенный материал на динамическом сайте ссылка довольно быстро становится «битой», когда владелец динамического сайта меняет его структуру так, как ему захочется.

Появление постоянных ссылок

В этот момент разработчики динамических сайтов придумали понятие «постоянных ссылок». Что это такое? Это ссылки определенного вида, указывающие на отдельные материалы динамического сайта (посты, статьи, новости и так далее).

С технической точки зрения «постоянные ссылки» ничем не отличаются от ранее существовавших гиперссылок. Отличие в том, что в веб-приложении создали отдельный механизм, поддерживающий «постоянные ссылки». Теперь, как и до появления «постоянных ссылок», владелец сайта может продолжать менять структуру динамического сайта, наслаждаясь его динамичностью, но созданный механизм поддержания «постоянных ссылок» в веб-приложении при любом изменении структуры сайта обеспечивает сохранность структуры «постоянных ссылок».

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

То есть, насколько я понимаю, при создании динамического сайта владелец такого сайта должен сразу же выбрать структуру постоянных ссылок и в дальнейшем никогда ее не менять, точно так же, как создатель статического сайта при его создании проектирует статичную структуру его папок, которую в дальнейшем не предполагается изменять. (В реальной жизни большие динамические сайты всё же иногда меняют структуру постоянных ссылок, из-за чего их разработчикам приходится создавать дополнительные механизмы для перенаправления ссылок «устаревшего вида» на новые ссылки, чтобы не потерять часть пользователей.)

Постоянные ссылки на примере ЖЖ

Начало главной ленты моего блога в ЖЖ открывается по следующей ссылке:

https://ilyachalov.livejournal.com

Продолжение главной ленты моего блога в ЖЖ открывается по следующим ссылкам:

https://ilyachalov.livejournal.com/?skip=10
https://ilyachalov.livejournal.com/?skip=20
https://ilyachalov.livejournal.com/?skip=30
...и так далее.

Насколько я понимаю, речь о постоянных ссылках заходит в контексте ссылок на отдельные посты блогов (на отдельные статьи в журналах и энциклопедиях, на отдельные новости на новостных сайтах и так далее). Поэтому приведенные выше четыре ссылки не называют «постоянными ссылками» (permalinks), хотя в техническом плане они от «постоянных ссылок» ничем не отличаются.

Постоянные ссылки на отдельные посты в моем ЖЖ можно получить, открыв в браузере вышеприведенные ссылки на главную ленту моего блога в ЖЖ, выбрав там любой пост и нажав на его название мышью. Вот несколько примеров:

https://ilyachalov.livejournal.com/156270.html
https://ilyachalov.livejournal.com/272305.html
https://ilyachalov.livejournal.com/278696.html

Может показаться, что в вышеприведенных трех ссылках речь идет про файлы «156270.html», «272305.html» и «278696.html», в которых эти посты хранятся на веб-сервере. На самом деле, конечно, такие файлы на веб-сервере не хранятся. Данные (тексты постов) хранятся в базе данных под управлением СУБД (системы управления базами данных). Когда я набираю в строке браузера одну из вышеприведенных постоянных ссылок на пост и отправляю HTTP-запрос на веб-сервер с помощью своего браузера, веб-приложение принимает этот HTTP-запрос, получает эту постоянную ссылку и по числу, содержащемуся в постоянной ссылке (это число является идентификатором поста в базе данных), получает текст поста из базы данных, а затем формирует HTML-страницу, которую веб-сервер возвращает в окно моего браузера.

Как можно понять из вышеприведенных ссылок, разработчики ЖЖ выбрали в качестве структуры постоянных ссылок следующий шаблон:

https://[блогер].livejournal.com/[номер поста в базе данных].html

Разработчики ЖЖ могут менять структуру сайта, как угодно, так как ЖЖ тоже является динамическим сайтом. Они могут даже поменять движок сайта (веб-приложение), если захотят. Но они должны поддерживать вышеприведенный шаблон структуры постоянных ссылок, не должны его менять, если хотят, чтобы пользователи, сохранившие в своих браузерах ссылки на отдельные посты разных блогеров ЖЖ в закладках, могли вернуться по этим ссылкам в эти посты в ЖЖ. То есть разработчики ЖЖ не должны менять эту структуру, если не хотят потерять часть пользователей. (Либо они могут поменять эту структуру, но, чтобы сохранить пользователей, приходящих по «устаревшим» постоянным ссылкам, им придется создать на веб-сервере перенаправление с «устаревших» постоянных ссылок на постоянные ссылки с изменившейся структурой.)

Другие виды структуры постоянных ссылок

А как и зачем можно поменять структуру постоянных ссылок?

После появления постоянных ссылок с номерами записей в базе данных люди стали задумываться о том, что было бы гораздо удобнее, если бы в постоянной ссылке вместо непонятного числа содержалась некая информация, дающая представление о содержании материала сайта (поста блога, статьи в журнале или энциклопедии, новости на новостном сайте и так далее). На правильно спроектированных статических сайтах, кстати, структура ссылок так и устроена - она дает информацию о содержимом материала, на который указывает.

Рассмотрим, например, как устроены постоянные ссылки на новости на известном новостном сайте «Лента.ру». Вот один из примеров постоянной ссылки на новость на этом динамическом сайте:

https://lenta.ru/news/2022/12/21/upiter/

Как видно по этой постоянной ссылке на новость, разработчики сайта «Лента.ру» используют в данном случае такой шаблон структуры постоянных ссылок:

https://lenta.ru/news/[год]/[месяц]/[день]/[намёк на содержание статьи]/

То есть в данном случае веб-приложение получает из такой постоянной ссылки дату опубликования статьи и строку из латинских букв. Этой информации должно быть достаточно для идентификации нужной записи в базе данных, содержащей записи с текстами новостей. При такой структуре постоянных ссылок веб-приложение должно обеспечить уникальность сочетания даты и строки латинских букв для каждой новости. Веб-приложение не должно допустить ситуации, когда у нескольких новостей будет одно и то же сочетание даты опубликования и строки латинских букв.

Это только один из примеров возможной структуры постоянных ссылок. Вообще их существует множество. Одна и та же система управления контентом (CMS) может предлагать десятки возможных структур постоянных ссылок (например, такой выбор предлагает веб-приложение «WordPress» в своих настройках). Важно сразу выбрать одну структуру постоянных ссылок и не менять ее, как было уже отмечено ранее в этом посте.

Дополнительное чтение

Небольшая, но полезная статья в википедии на английском языке:
https://en.wikipedia.org/wiki/Permalink

Статья в википедии на русском языке (малополезная, так как там всего несколько строк):
https://ru.wikipedia.org/wiki/Постоянная_ссылка

Образование, Сайтостроение, Программирование, Английский язык

Previous post Next post
Up