Чистые ссылки Drupal

link

Что такое чистые ссылки.

Было время когда все сайты писались на HTML. Каждая страница сайта была отдельным html файлом. Сайт представлял из себя большое количество html файлов, которые лежали в корне сайта или в папках. Что бы получить какой-либо документ нужно пройти по адресу имя_сайта/папка/имя файла(site.ru/directory/name.html). Такие адреса называют чистыми URL.

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

Проблема в следующем. Скрипт не может принять чистый URL как параметр и в нем появляются знаки (?, = и &). URL перестаёт быть чистым. Почему так происходит объяснять долго, если вам очень интересно учебник PHP вам в помощь(раздел про передачу данных методом GET).

Зчем нужны чистые URL?

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

Включаем чистые URL.

Возможность включения чистых ссылок была проверена Друпалом во время установки. Узнать результаты проверки можно перейдя  Configuration → Search and metadata → Clean URLs. Не знаю как у вас, а мне чистые сылки сразу не подключили.

чистые URL не возможно применить

Чтобы исправить ситуацию отредактируем файл .htaccess Это файл находиться в корневой папке сайта. Сачала проверим учитывает вебсервер файл .htaccess или нет. Для этого набирите любые символы и сохраните файл. После этого ваш сайт будет недоступен, а сервер будет возвращать ошибку 500 Server Error. Если ваш сайт после изменения .htaccess попрежнему работает, значит данный файл не учитывается вебсервером. В этом случае обратитесь к вашему хостеру.

У меня после внесения "мусора" в файл сайт отключился поэтому удаляю ненужные символы и перехожу к редатированию. Редактирование это громко сказано. Всё что нам нужно сделать это раскоментировать (удалить значок #) строчку
# RewriteBase

Сохраняем .htaccess и снова запускаем тест.

после редактирования .htaccess мы можем подключить чистые URL

Тест пройдён. Отмечаем Enable clean URLs и сохраняем.
Ссылки у нас чистые, осталось позаботиться об их правильности. Дело в том, что Drupal при составлении ссылок использует порядковый номер статьи или термина словаря. Получается примерно следующее site.name/node/1. Смысла в таких url мало. Наша следующая задача сделать URL правильным.

Для автоматической генерации правильных чистых ссылок нам понадабяться:

  1. Модуль pathauto.
  2. Для Pathauto необходим модуль Token.
  3. Вместе с Pahtauto рекомендуется использовать модуль Transliteration. Данный модуль преобразовывает Unikode в US-ASCII, или проще говоря кирилицу в латиницу. Кроме этого transliteration может преобразовывать имена загружаемых файлов и заменять опасные символы.

Модули поставили переходим к настройке  Configuration → Search and metadata → URL aliases → settings. Здесь находятся основные настройки.

Основные настройки для генерирования чистых URL

Начнём разбираться что к чему.

Separator определяет символ который будет использован как разделитель слов в url. Нам предлагают в качестве разделителя использовать "-". Мы можем заменить его на любой символ, но лучше оставить как есть.

Character case изменяет регистр в URL. Наш URL будет генерироваться автоматически и есть вероятность что в него попадут буквы в верхнем регистре. Отметив Change to lower case мы получим все символы URL в нижнем регистре.

Maximum alias length - максимальная длина псевдонима(сгенерированного URL).

Наши правильные URL могут складываться из нескольких частей(компонентов). Максимальная длина одного компонента указывается в Maximum component length. Рекомендованные значения для максимальной длины компонента и URL - 100 символов.

Update action. Здесь мы можем определить действия Pathauto во время обновления существующего контента, который уже имеет псевдоним. Нам предложено на выбор три варианта:

  1. Не делать ничего. Оставить старый псевдоним.
  2. Создать новый псевдоним. Оставить существующий псевдоним.
  3. Удалить старый и создать новый псевдоним.

Выбор Update action дело ответственное и требующее подробного рассмотрения.

Начнём с последнего пункта. Он подходит молодому сайту, на котором ещё не успели побывать поисковики. Если вы удалите URLы на проиндексированном сайте произойдёт следующее. Поисковик приходит на ваш сайт и не находит "старые" страницы. Получая большое количество 404 ошибок(страница не найдена) поисковик начинает сильно сомневаться в качестве сайта. В итоге мы получаем плохую репутацию и отсутствие проиндексированных страниц. Чтобы избежать подобной ситуации можно выбрать первый пункт(оставить старые псевдонимы). После этого уже существующие страницы будут доступны по старым адресам, а новые будт иметь URL сгенерированные по новым правилам. Второй пункт также оставляет старый псевдоним но в добавок к нему создаёт новый. Выбрав второй пункт URLы всего контента будут иметь одинаковую структуру.

Для рабочего сайта второй вариант самый подходящий, но есть момент на который стоит обратить внимание. Создавая новый псевдоним и оставляя старый мы получаем два адреса для одной страницы. Поисковик воспринимает это как две разные страницы с одинаковым содержимым (дубли). Для поисковых систем наличие дублей это признак низкого качества сайта. Тут возникает вопрос, что для сайта лучше чистые URL или отсутствие дублей. Прежде чем ответить поговорим ещё немного о дублях. Дубли на нашем сайте образуются после того как мы включаем чистые ссылки. Адреса с параметрами никуда не исчезают. Таким образом просто включив чистые URL мы уже создали дубль всего сайта. Это ещё не всё. В начале статьи я говорил что Drupal создаёт чистые, но не совсем правильные URL. Чтобы это исправить мы создаём для них псевдонимы, при этом старые (друпаловские ) адреса остаются. Вот вам ещё один дубль сайта. Для каждой страницы мы имеем минимум два дубля. Вся это идея с чистыми URLами уже не кажется стоящей. На самом деле всё не так страшно. В борьбе с дублями нам помогут сами поисковые системы и модуль друпала Metatags. Подробнее о борьбе с дублями читайте здесь.

Следующим пунктом в настройках идёт Transliterate prior to creating alias - транслитерация до создания псевдонима. Для адреса страницы я буду использовать название статьи и термин словаря site section. Если оставить всё как есть то Pathauto составит адрес используя кирилицу. Отмечая данную опцию, русские слова адреса будут записаны английскими буквами.

Reduce strings to letters and numbers убирает символы не входящие в ASII-96.
Strings to Remove - удаляет из псевдонима нежелательные слова.

Последним разделом в настройках у нас идёт Punctuation.

правила замены знаков в чистых урлах

Здесь указываем pathauto что делать с знаками при создании псевданима. Вариантов всего три оставить, заменить на разделитель (separator определяли в начале настроек, по умолчанию "-") или не делать ничего. Большинство символов которые могут нам встретиться при создании адресов можно и нужно удалить. Мы создаём URL адрес и нам будет достаточно того, что слова в нём разделены. Обычно я заменяю только символ нижнего подчёркивания"_" остальные удаляю.

С основными настройками закончили переходим к созданию структуры URLа   Configuration → Search and metadata → URL aliases → paterns. На этой странице нам предлагают создать шаблоны для всех типов контента, словарей и пользователей. Принцип создания одинаковый поэтому рассмотрим только для типов материалов.

шаблоны для генерирование правильных чистых URL

Мы можем определить один default path pattern, который будет использоваться для всех типов материалов или для каждого определим свой. Первым делом решим как должен выглядеть url. Для типа материала Article, URL будет состоять из названия раздела сайта и заголовка. Теперь кликнем по полю Pattern for all Article paths  и выберем нужные токены.

Для распределения контента по разделам сайта мы создавали словарь site_section. Найдём его в столбце NAME и кликнем по токену напротив него. В нашем поле Pattern for all Article paths появился токен. В URL вместо [node:field_site_section] модуль Path вставит термин из словаря Site_section. Чтобы две части адреса не сливались ставим знак "/" и ищем токен для заголовка. Нужный нам токен называется Title.

Мы можем вставлять в URL не только токены. Посмотрите на поле Default path pattern. Первым написано слово content без скобок. Это слово не будет заменятся.

Добавлено пользователемСветланаon вт, 11/05/2013 - 20:17

добрый вечер, у меня возникла проблема. Устанаовила указанные Вами модули, после того как включиоа сайт превратился в пустую белую страницу. Пыталась удолить модули - ничего не вышло. Тоько белая страница осталась. Пришлось все переделывать. Подскажите с чем связана указанная проблема, как можно ее решить??? Заранее благодарю.

С белым экраном давно не сталкивался. Попробуйте подключать модули поочереди. Начните даже не с модулей а с включения чистых УРЛов. Включили посмотрели сайт работает в адресах нет "?" идём дальше -> подключаем Pathauto предварително подключив Path и Token. Подключая модули по очереди будет понятно кто из них виноват. Хотя остаётся вероятность что проблема не в модулях. Часто проблема возникает из-за превышения лимита памяти.

Добавлено пользователемOlegRon вт, 04/18/2017 - 22:00

Будьте добры, подскажите, как исправить подобную ситуацию. Ссылки в шаблоне Друпал 7 имеют такой вид: мойсайт/portfolio/project-wide-slider-0#.WPZg62mLT0M. То есть, после чистых ссылок добавляется знак # и абракадабра из букв, которая меняется при обновлении страниц. Pathauto, Token, Transliteration, Global Redirect включены.

Как мне сказали, это "особенность шаблона". По-моему такая "особенность" это баг, так как отрицательно влияет на СЕО. Подобные ссылки генерируются views блога и портфолио. Вот "живой" пример, тот же самый шаблон http://www.chhapaak.com/portal/blog/me-n-mine-hyper-realistic-rangoli-erasing-pramod-sahu-raipur#.WPcm-mmLT0P

Это какая-то странная особенность. Смысл в таких ссылках есть если они ссылаются на конкретное место в странице. В примере с ссылками всё нормально.

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