Чпу url


Чпу urlЗдравствуйте, дорогие читатели блога life-crazy.ru!
В этом посте речь пойдет о том, что такое чпу, и какие основные настройки необходимо произвести после установки CMS WordPress.

Если Вы отключали локальный сервер Denwer, то выполните его запуск. На рабочем столе должны быть ярлыки, которые помогут Вам это сделать, ищите start denwer, кликайте пару раз и пойдет запуск виртуального сервера.

 

Затем, в адресной строке своего любимого браузера набирайте адрес: localhost/global/wp-admin.

Global – это название моей папки, где лежит блог, у Вас она может называться по-другому.

Возможно, при первом входе необходимо будет ввести логин и пароль, который вы создавали.

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

Чпу url

Я всегда оставляю только «Текущее состояние блога» и «Последние комментарии», также выбираю 1 столбец. Пункта 3 «Related Post» на начальном этапе у Вас не будет.

Чтобы убрать данное окошко с настройками, еще раз нажмите «Настройка экрана». С внешним видом немного разобрались, теперь давайте настроим внешний вид ссылок.


Что такое ЧПУ? Зачем настраивать постоянные ссылки (ЧПУ)?

ЧПУ – это человеко-понятные урлы. Очень многие новички не настраивают внешний вид ссылок, и долгое время болтаются на задних позициях в поисковых системах.

Чтобы Вам было понятней, давайте я приведу примеры:

1)    Урлы – которые выводятся по умолчанию, без настройки имеют такой вид: life-crazy.ru/?p=233.
Такие ссылки поисковые системы недолюбливают, поэтому блог в таком случае сложнее продвигать.

2)    Теперь обратите внимание на правильную настройку чпу: life-crazy.ru/chto-takoe-chpu.html.

Такой вид URL содержит ключевое слово — chto-takoe-chpu, что в свою очередь увеличивает релевантность документа по данному запросу, и еще на шаг приближает к ТОПу поисковой выдачи. ТОП – первая десятка в выдачи.

Настройка постоянных ссылок (ЧПУ) для WordPress

Давайте приступим непосредственно к самой настройке ЧПУ. В админ-панели переходим в раздел «Настройки» — «Постоянные ссылки ЧПУ».


Чпу url

Нас перебрасывается на страницу настройки, здесь необходимо настроить вид ссылки для WordPress по произвольной структуре, указать свой вид URL страницы, смотрите скриншот.

Чпу url

Ставим кружечек напротив «Произвольно» и указываем любой понравившийся вариант.

/%category%/%postname%/

Используя данную конструкцию, Ваши ссылки будут иметь такой вид: ваш_сайт/название_категории/название_поста/.

/%postname%/

Такой вид ссылки позволяет выводить название сайта и сразу название поста, то есть записи будут иметь следующий вид: ваш_сайт/название_поста/.

/%postname%.html

А данная конструкция является самой популярной и используется на большинство блогах, которые сделанные на CMS WordPress. Используя данную конструкцию, Ваша ссылка будет иметь такой вид: ваш_сайт/название_поста.html

Как видите, URL не сильно отличается от второго варианта, различия составляет только окончание, в последнем добавлено .html. Вот именно такой вид одобряют поисковые системы, и именно данную конструкцию я рекомендую использовать при настройке постоянных ЧПУ ссылок. Ну на этом еще не все.

Теперь нам нужно установить плагин, который будет переводить русские символы в латиницу.

life-crazy.ru

Что такое ЧПУ?


Что такое ЧПУ

ЧПУ – это исковерканная англоязычная аббревиатура SEF URL (search engines friendly url). Она обозначает адреса ссылок, которые дружелюбны для поисковых систем. О ЧПУ я также писал в статье про внутреннюю оптимизацию сайта. В русскоязычном варианте SEF URL пишется как ЧПУ – человеко-понятные url. Что всё это значит? Это значит, что адреса ваших ссылок будут иметь осознанный текст, а не технический мусор, за примером можете сходить по ссылке выше.

Какие преимущества дают SEF URL?

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

Во-вторых, SEO. Такие ссылки приветствуются поисковыми системам, пару лет назад они могли бы дать вам значительный перевес над конкурентами. Сегодня подобные ссылки являются само собой разумеющимися, сейчас редко встретишь сайты с не ЧПУ ссылками, однако они до сих пор есть.

В-третьих, это престиж. Когда я захожу на сайты, где вместо понятного и красивого адреса в ссылках содержится разного рода мусор, а то и засекреченная информация – я задаюсь вопросом: «Вроде бы приличный сайт, но почему разработчики не сделали ЧПУ? Неужели это было так сложно? Может им настолько нет дела до подобных вещей или просто не хватает знаний и навыков?». В общем, для меня такие сайты большая загадка.


В-четвёртых, безопасность. Сайты с ЧПУ ссылками не содержат в своём адресе техническую информацию переданную методом GET (уроки PHP), которую можно запросто использовать для взлома сайта.

И последнее: ЧПУ – как средство навигации. Если ссылка понятна пользователю, то он сам может переходить по разделам сайта, просто редактируя ваш URL. Например:

http://site-on.net/useful/2-sublime-text-2

Если удалить из данной ссылки её последнюю часть (2-sublime-text-2), то мы попадём в раздел, к которому относится данная статья:

http://site-on.net/useful/

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

Недостатки ЧПУ ссылок

Первое: возможно, вам придётся повозиться и даже помучаться, чтобы их настроить или вовсе сделать с нуля.

Второе: ваш сайт станет дольше грузится, а именно, на пару десятитысячных секунды 🙂 Это связано с тем, что для работы ЧПУ подключается специальный модуль веб-сервера Apache – mod_rewrite, которому понадобится это «огромное» количество времени на обработку ссылок.


Когда ЧПУ не нужны?

ЧПУ ссылки могут быть и лишними, например, если у вас закрытый корпоративный портал, где вся работа осуществляется только авторизованными пользователями, а для всех остальных, в том числе и для поисковых роботов доступ закрыт.

Также ЧПУ будет излишеством в back-end вашего сайта, то есть в панели администратора.

Что ещё нужно знать о ЧПУ?

Во всех актуальных версиях CMS данная проблема уже решена. Всё что вам нужно, чтобы сделать ЧПУ ссылки, это лишь включить соответствующие настройки в движке вашего сайта.

SEF URL

Но что если мы имеем дело с сайтом на чистом PHP, без CMS, или же хотим разработать свою собственную CMS в которой хотим сделать SEF URL? Для подобных случаев, а также для людей, которые хотят углубиться и понять всю суть преобразований обычной ссылки в ЧПУ, я и написал остальную часть статьи. Если вы читали мои предыдущие статьи, то знаете, что мой блог как раз относится к этой категории, то есть сайтам, написанным с нуля на PHP, без использования готовых CMS.

Ах да, ещё один момент: из личного опыта не советую делать кириллических URL.

Коротко: в чём вся суть?

Пишу для тех, кто совсем не в курсе дел. Везде в наших тегах гиперссылки мы будем указывать ЧПУ адреса:

<a href="http://site-on.net/useful/2-sublime-text-2">Sublime Text 2</a>

Суть в том, чтобы из красивого и понятного человеку URL (ЧПУ) сделать на лету URL, который будет полезен разработчику PHP (не ЧПУ):


<a href="http://site-on.net/index.php?category=useful&article=2-sublime-text-2">Sublime Text 2</a>

При этом всем на свете (посетителям, поисковым системам, всем) будет видна именно ЧПУ ссылка, но мы как разработчики PHP будем знать, что таит в себе URL на самом деле. В конце статьи, для полного понимания, я покажу все этапы, как ЧПУ работают у меня на блоге.

Создание SEF ссылок с помощью mod_rewrite

mod_rewrite – это модуль веб-сервера Apache, предназначенный для перезаписи URL. Естественно, для начала работы вы должны включить этот модуль в настройках Apache, эти настройки находятся в файле httpd.conf, вам нужно будет раскомментировать строку с именем данного модуля. У 99% хостинг-провайдеров он включён, за исключением совсем ужасных хостингов. Кстати говоря, используя Denwer, у меня не получилось нормально настроить собственные ЧПУ, мне не захотелось долго искать в чём именно проблема (мешают собственные редиректы Денвера) и я установил Апач отдельно. Для тех, кто не знает, как установить сервер Апач не используя Денвер, я напишу инструкцию в одной из будущих статей. А здесь мы продолжаем разбирать наши ЧПУ.

Все наши правила преобразований URL записываются в небезызвестный файл .htaccess, который должен лежать в корне нашего сайта.


Для корректной работы mod_rewrite в нём обязательно должна быть написана следующая строка:

Options +FollowSymLinks

Или, в частности, для моего хостинга:

Options +SymLinksIfOwnerMatch

Далее подключаем наш модуль rewrite к конкретной папке, то есть к папке, в которой лежит наш .htaccess:

RewriteEngine On

Имеем следующий файл .htaccess:

Options +SymLinksIfOwnerMatch RewriteEngine On 

Правила и условия mod_rewrite

Все правила записываются с помощью команды RewriteRule, после которой ставится пробел и записывается шаблон ваших ЧПУ с помощью регулярных выражений, далее ставится ещё один пробел и указывается строка, в которую мы хотим преобразовать данный шаблон, где $1,$2,…$n – наши переменные. Более подробно о регулярных выражениях вы можете узнать по приведённой выше ссылке, а также далее в данной статье. Давайте рассмотрим пример:

RewriteRule ^useful/([a-z]*) /index.php?category=useful&article=$1

Где ^useful/([a-z]*) – это шаблон ожидаемого url,

а /index.php?category=useful&article=$1 – это то, во что мы его конвертируем, если пришедший URL подошёл под шаблон.

При этом $1 равен тому, что написано в круглых скобках, то есть $1 = [a-z]* Если бы круглые скобки встречались 2 раза, то у нас были бы переменная $1 и $2, если круглые скобки встречаются 3 раза, то переменные $1, $2, $3 и так далее. При этом переменные создаются в том же порядке, как идут круглые скобочки.


Понятно? – молодцы. Непонятно? — идёмте дальше, мы ещё к этому вернёмся. Также хочу обратить ваше внимание на то, что для лучшего понимания статьи, вы уже должны обладать начальными знаниями о PHP, а также о работе с методами GET и POST. Продолжаем.

Для того чтобы наш обработчик, то есть mod_rewrite не срабатывал каждый раз без надобности, мы в RewriteRule указываем шаблон, которому должны соответствовать приходящие URL. Если URL не соответствует шаблону, то mod_rewrite просто не сработает и не преобразует пришедший SEF URL в URL, с которым мы можем работать.

То есть на данном этапе вам важно понять саму суть: в ЧПУ ссылках не передаются параметры, а без параметров мы не можем ничего сделать в PHP с этой ссылкой, поэтому с помощью mod_rewrite мы преобразуем ЧПУ ссылку без параметров в не ЧПУ ссылку с параметрами. Что такое параметры? В примере выше имеем 2 параметра:

/index.php?category=useful&article=$1

Параметр category и параметр article.

Опять-таки обращаю ваше внимание, что про параметры вы уже должны были знать, я лишь вкратце вам напомнил.

В шаблонах мы можем использовать символы и символьные классы. Символ точки обозначает абсолютно любой символ.


  • . – любой одиночный символ
  • [redf] – это класс символов. Обозначает наличие одного из перечисленных символов с учётом регистра.
  • [a-z] – класс символов. Обозначает наличие одного из символов в промежутки от a до z, то есть весь английский алфавит.
  • [a-zA-Z] – то же самое, только без учёта регистра, то есть весь алфавит, включая и большие и маленькие буквы.
  • Можно и с цифрами: [0-9]
  • Естественно, всё можно комбинировать: [a-zA-Z0-9]
  • [^rewfad] – класс символов, но со знаком ^ внутри квадратных скобочек обозначает, что шаблон НЕ должен содержать данных символов.
  • site|cite – обозначает альтернативу: подходит site или cite.

Квантификаторы или кванторы

Все предыдущие примеры обозначали один символ (одну единицу), а что если мы хотим показать, что символов из этого промежутка [a-zA-Z] может быть не один, а сколько угодно. Для этого мы должны использовать квантификаторы:

  • ? — 0 или 1 символ из предшествующего текста (класса символов, символа и тд.)
  • * — 0 или любое количество символов из предшествующего текста (n>0)
  • + — 1 или любое количество символов из предшествующего текста (n>1)
  • {n} — ровно n символов, где n – конкретное число.

Например:

  • {4} — должно быть ровно 4 символа из предшествующего текста.
  • {4,5} — 4 или 5 символов
  • {,6} — от нуля до 6 символов
  • {4,} — от 4 до бесконечности символов

Примером может послужить наша уже известная строчка:

RewriteRule ^useful/([a-z]*)

В которой мы применили квантификатор (квантор) звёздочку (*) после класса символов [a-z]. Это значит, что в нашем URL после useful/ могут находиться символы от a до z в любом количестве и, естественно, в любой последовательности, а могут и не быть вовсе. Домен в счёт не берём, он подразумевается сам по себе.

Экранирование

Также при составлении шаблона не стоит забывать и про экранирование. Если вы хотите заключить в класс символов, например, символ точки, то вам нужно её заэкранировать, так как без экранирования точка (служебный символ) обозначает абсолютно любой символ:

[a-zA-Z0-9.]

Тоже самое касается и квадратных скобочек, они у нас обозначают класс символов, поэтому если в вашем url могут быть квадратные скобочки их нужно заэкранировать:

[a-zA-Z0-9.[]]

Ограничение начала и конца строки (маркеры)

Для того чтобы указать начало или конец строки, без учёта домена, используются символы:

  • ^ — начало URL
  • $ — конец URL

То есть в нашем первом примере мы указали, что наш шаблон начинается именно с начала URL, а не откуда угодно (с середины, с конца):

RewriteRule ^useful/([a-z])

Обращаю ваше внимание на то, что знак ^ внутри квадратных скобок обозначает отрицание, не путайте!

Обратные связи в mod_rewrite

$n – это наша «переменная» в круглых скобках, о них мы уже говорили. Работает для RewriteRule.

%n – то же самое, только в RewriteCond. RewriteCond мы ещё не рассматривали, он у нас впереди.

Итак, если RewriteRule – это наши правила преобразования URL, то RewriteCond – это условие, аналог if в PHP. RewriteCond нужно в ситуациях, когда вам необходимо выполнить URL преобразование (RewriteRule) только при выполнении какого-то условия.

У сервера есть свои собственные переменные, которые мы можем использовать в наших условиях RewriteCond:

HTTP заголовки: 
HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT REMOTE_ADDR

Соединение и запрос:

REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE

Внутри серверные:

DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE

Системные:

TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME

Специальные:

API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ

Синтаксис применения серверных переменных таков:

%{переменная}

Давайте составим наше первое условие:

RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteRule … 

Если посетитель зашёл с браузера Mozilla Firefox, то выполняем следующее правило. Как видите, в отличие от PHP мы не используем фигурные скобки для обрамления нашего правила, которое выполнится, если условие TRUE.

RewriteCond позволяет использовать операторы сравнения: < (меньше), > (больше), = (равно). Также есть специальные значения, например:

  • -d (является ли каталогом)
  • -f (является ли файлом)
  • -s (является ли файлом с ненулевым размером)
  • ! – отрицание.

Флаги

  • nocase|NC – можно писать либо nocase, либо NC, это одно и то же, обозначает регистро-независмость. То есть мы можем больше не писать:
  • RewriteRule ^useful/[a-zA-Z]

    Вместо этого написать так:

    RewriteRule ^useful/[a-z] [NC]
  • ornext|OR – если это, либо следующее условие TRUE, то выполняем RewriteRule. Пример:
  • RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR] RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule … 
  • Last|L – последнее правило. Если правило применилось, то правила, расположенные ниже по коду, не сработают.
  • next|N – некий аналог continue. Если правило применилось, заставляет отыгрывать все правила с самого начала, но при этом с уже преобразованной строкой.
  • redirect|R – редирект. По умолчанию 302. Можно указать другой код редиректа, например:
  • [R=301]

  • forbidden|F – URL становится запрещённым.
  • gone|G – посылает 410 ответ сервера.
  • chain|C -связь. Если правило не сработало, то связанные с ним правила тоже автоматически не сработают.
  • type|T – MIME-тип. Принудительное выставление типа файла. Можно выдавать одно расширение файла за другое 🙂 Например, лежат у нас файлы с расширением .zip, а на самом деле это картинки, так вот чтобы отдавать эти файлы как картинку(.png, .gif и тд.), можно использовать данный флаг.
  • skip|S – пропустить следующее правило, можно указывать сразу несколько, например:
  • [S=2]
  • env|E=VAR:VAL – установить переменную окружения.
  • cookie|CO – послать куки.

Если нужно поставить одновременно несколько флагов, ставим их через запятую, например:

[NC,L]

Как вы уже могли догадаться, mod_rewrite можно использовать не только для ЧПУ, но и для многих других интересный целей, например, клоакинга – это метод чёрного SEO, когда по одному и тому же адресу посетителям отдаётся одна страница, а поисковым роботам совершенно другая. Ну и под конец статьи, я покажу вам живой пример использования всего написанного выше и как же это всё работает взаимодействуя с нашим PHP.

site-on.net

Доброго всем времени суток! Дополнительно к таким аббревиатурам как CTR, eCPM, ТИЦ, PageRank, RSS добавляется новая – ЧПУ (человекопонятные урлы). В посте я постараюсь объяснить, что это такое, а также попробую дать оценку эффективности их применения в оптимизации сайта.

ЧПУ

Что же такое ЧПУ?

ЧПУ — это, грубо говоря, красивые имена урлов страниц, которые понятны пользователям.

Сразу приведу пример на базе системы wordpress. По умолчанию блоги на этом движке имеют вот такие url.пример нечеловекопонятного урла

Конечному пользователю не будет понятно по ссылке страницы о чем будет идти на ней речь. А вот уже другой пример.

пример человекопонятного URL

А здесь по окончанию сразу видно, что в статье речь пойдет о советах по увеличению доверия у читателей. Такие постоянные ссылки использовать лучше, чем те, которые стоят по умолчанию.

Как же настроить URL, понятные человеку?

Разберу на примере WordPress. Это достаточно легкая процедура, которая займет не больше 5 минут вашего времени.

  1. Вам необходимо зайти в настройки wordpress в категорию «постоянные ссылки (ЧПУ)». Если вы ничего ранее не предпринимали в этом разделе, то галочка будет стоять на строчке «по умолчанию».
  2. Далее вам необходимо выбрать понравившуюся структуру или задать свою «произвольная структура». Если вы хотите использовать произвольную как на моем блоге, то в это окошко необходимо вписать: /%postname%/. В таком случае сразу после имени вашего домена будет располагаться имя записи, поста или статьи. Далее нажать «Сохранить изменения».
  3. Теперь в вашем файле .htaccess необходимо добавить следующие строчки.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Теперь ЧПУ должны работать.

ЧПУ и поисковые системы

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

Сейчас человекопонятные URL даже в русскоязычном сегменте интернета — это один из факторов ранжирования в. Все дело в том, что поисковики выделяют урлы, в которых находятся ключевые слова запроса. Вот яркий пример (запрос «логотип для сайта»).

поисковая выдача Яндекса

Видите, выделился транслит урла? Это во многом говорит об эффективности применения именно такой конструкции.

Какой я вывод сделал для себя? Я использую на каждом из своих сайтов ЧПУ, потому что это удобней как для меня, так и для пользователей, и они влияют на продвижение веб-ресурсов.

sosnovskij.ru

ЧПУ — человеко-понятные УРЛ. УРЛ, для тех кто не знает, это адрес той или иной страницы на вашем сайте. ЧПУ очень важный элемент, как для SEO, так и для общего восприятия вашего сайта посетителями. Согласитесь, ведь намного удобней запомнить такую ссылку http://phones.com/samsung/s5230/ чем такую  http://phones.com/catalog.php?cat_id=456&phone_id=874.

С помощью таких урлов  в адрес страницы можно вшить любое ключевое слово и оно обязательно будет учтено поисковыми системами. Не смущайтесь, что ключевое слово в УРЛе на латинице, ПС прекрасно понимают транслит. Обратите внимание на эту картинку.

Чпу urlКак видите, некоторые слова  в адресе страницы Яндекс выводит жирным, а значит происходит совпадение с запросом.

Организовать ЧПУ на сайте достаточно просто. Если вы используете какой либо движок, наверняка создатели движка уже сделали возможность включения ЧПУ, если нет, попробуйте поискать специальные плагины. Например в DLE, ЧПУ включается элементарно в основных настройках сайте. На WP это делается тоже достаточно просто. НастройкиПараметры постоянных ссылок, выбрать вариант Название записи, либо вписать произвольный шаблон, у меня на этом блоге например стоит /%category%/%postname%/.  Ах да, не забудьте поставить плагин Rus-to-lat, иначе урлы получатся еще уродливее, на русском в закодированном виде.

Если же вы у вас самописный движок, придется немного постараться.  Возьмем для примера уродливый УРЛ из начала поста  http://phones.com/catalog.php?cat_id=456&phone_id=874 и сделаем из него красивый.

В файле .htaccess создадим правило, которое будет в зависимости от ЧПУ урла, вызывать нужный нам скрипт с нужными параметрами.

RewriteEngine on
RewriteRule ^([^]+)/([^]+)/ catalog.php?cat_name=$1&phone_model=$2 [QSA,L]

Первая строка включает работу механизма преобразований. Вторая собственно создает правило. Это обычное регулярное выражение, которое заменит два слова через слеш после домена на  catalog.php?cat_name={первое слово}&phone_model={второе слово}.

В конце указываются флаги. Флаг  QSA  позволяет передавать скрипту дополнительные параметры, помимо категории и модели, после вопросительного знака. Флаг L  указывает механизму остановиться после этого правила и больше ничего н е преобразовывать, что-то типа break в switch’е.

Сам скрипт  catalog.php должен на основе названий уже найти нужную модель в базе даных. Если же по названию искать модель проблематично можно перед названием выводить в ссылке цифру — ID товара. Например   http://phones.com/456-samsung/874-s5230/. Тогда правило в htaccess будет выглядеть так:

RewriteEngine on
RewriteRule ^[0-9]+-[^]+/[0-9]+-([^]+)/ catalog.php?cat_id=$1& phone_id =$2 [QSA,L]

Таким образом механизм возьмет из урла  http://phones.com/456-samsung/874-s5230/ айдишники категории и телефона  456 и  874, и передаст их скрипту. Нужно изначально все тщательно продумать и правильно строить ссылки на сайте, ведь в случае их изменения переиндексировать будет достаточно трудоемким занятием. Если же вы собираетесь переделывать уже проиндексированные ссылки, вам следует добавить на эти страницы тег canonical в head страницы. Для нашей страницы это <link rel=»canonical» href=» /samsung/s5230/ «>. Этот тег указывает поисковым системам предпочитаемый адрес страницы и при обнаружении одинакового тега на страницах он их удачно склеивает, не теряя при этом ссылочного веса и всего остального.

Таким способом вам прийдется на каждый раздел сайта, будь то каталог, контент или список пользователей, создавать правило. Так делает DLE. Или можно поступить иначе, как например WordPress. Он перенаправляет любой урл на index.php, а сам движок php скриптами уже парсит его и определяет что выводить.

Ах да. На всякий случай проследите, чтобы у Вас был прописан тег <base href=»http://www.адрес_вашего сайта»>. Это на случай, если у вас на сайте присутствую относительные путя в ссылках, картинках и т.д. Собственно на этом все, чувствую я, что снова объяснил все как-то запутанно :( . Но вы всегда можете задавать вопросы в комментариях к статье.

denweb.org

Что такое ЧПУ и причем тут SEO

ЧПУ адрес или ЧеловекоПонятный УРЛ — это адрес страницы, который прост и понятен для посетителя сайта и поисковых систем (Search Engine Friendly URL). Давайте разберемся во всех преимуществах ЧПУ адресов, рассмотрим примеры ЧПУ для всевозможных обстоятельств и научимся правильно использовать ЧеловекоПонятные УРЛы в любых ситуациях. Я часто пишу о том, что SEO — это комплекс множества факторов, и одним из таких факторов является URL-адрес страницы.

Не буду тратить время и перейду сразу к примерам.

Пример не ЧПУ адреса страницы:

mysite.ru/index.php?category=21&page=713

Пример ЧПУ:

yautka.ru/blog/okazalos-svistok

Еще пример плохого ЧПУ:

mysite.ru/category-436/24867341.html

Еще пример ЧПУ:

estpozvonit.ru/mobila/iphone-6-s-plus-pochti-novij.html

Последний URL страницы выглядит и читается проще прочих.

Как использовать ЧеловекоПонятные УРЛы

Первое, что приходит в голову — ключевые слова! Если человек ищет резиновую утку, дайте ему простой адрес:

rezinaoptom.ru/igrushki/utka-rezinovaja

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

Еще ЧПУ ссылки легко запоминаются:

seoimba.ru/blog/seo

Такой URL легко ввести вручную и сразу понятно, что нас там ждет SEO блог. То есть, посредством ЧПУ адреса, мы предоставляем посетителям больше информации о странице, на которую ведет ссылка. А ссылка несущая в себе больше информации — полезнее и ценнее.

Если ЧПУ ссылка содержит ключевые слова, то вся ссылка в сниппете либо же ее часть выделяется жирным. Это делает ссылку на сайт более заметной и увеличивает CTR сниппета страницы в поиске (кликать будут чаще, чем на конкурентов).

Структура и шаблоны ЧПУ

Структуру ЧеловекоПонятных УРЛов можно оформить по-разному. Какой будет структура ЧПУ может зависеть от особенностей работы движка сайта, тематики или общей структуры сайта. Вот несколько примеров самых распространенных  ЧПУ шаблонов.

Пример прямого ЧПУ адреса:

doktorzlo.ru/kontakty/

Пример прямого ЧПУ адреса с расширением:

doktorzlo.narod.ru/kontakty.html

Такой адрес обычно имеют статические страницы вроде страницы «Контакты».

Пример ЧПУ категорий интернет-магазина:

crazyshop.ru/devochki/sumochki/acho-tak-dorogo.html

Пример ЧПУ структуры блога:

myblog.ru/2015/02/29/kto-zdes/

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

Чтобы корректно переместить страницы придется использовать 301 редирект, иначе исходная страница станет недоступной, а страница по новому адресу окажется дубликатом исходной, которая теперь недоступна.

Поисковики не оценят такие маневры и страница «вылетит» из поиска со всем вытекающими.

Постарайтесь не углублять структуру адресов, чаще всего достаточно глубины одной категории и множества категорий:

vypechka.ru/hlebushek/ vypechka.ru/bulochki/ vypechka.ru/tortiki/

Ведь чем дальше от названия домена сайта категория, тем ниже ее значимость для поисковых систем.

ЧПУ транслитом

Поисковые системы понимают любую транслитезацию по ГОСТу. Транслитезация оптимальна для создания ЧПУ, так как символы латиницы универсальны и не создают проблем при обработке. Кириллица, переведенная в транслит, достаточно легко читается и способна быстро предоставлять информацию о названии документа как людям, так и поисковым системам. Плюс транслита может быть в том, что сайт, использующий транслит в ЧПУ, в том же языковом регионе может иметь больший приоритет, чем сайт использующий латиницу.

Ну, а если вашей творческой частичке не нравится, как выглядят названия страниц транслитом — пишите ЧПУ латиницей.

ЧПУ латиницей

Латиница универсальна, ее легко обрабатывают поисковые системы, понимает половина мира и большая часть Россиян. А такие слова как shop, contacts или delivery уже давно близки и знакомы всем. Так что не бойтесь использовать английские слова в названии страниц и других документов, если такой вид ЧПУ кажется вам более подходящим.

ЧПУ кириллицей

Многие сайты используют кириллические ЧПУ, например, Википедия. Только есть одна проблема — кодирование кириллических символов в URL при копировании ссылки.

Фактически, кириллический ЧПУ:

ru.wikipedia.org/wiki/Сингулярность

Выглядит совсем не ЧПУ:

ru.wikipedia.org/wiki/%D1%E8%ED%E3%F3%EB%FF%F0%ED%EE%F1%F2%FC

Пробелы, нижнее подчеркивание или дефис (тире) в ЧПУ

Не используйте в ЧПУ адресах пробелы! Пробелы лучше заменять на «-» или «_». А что лучше использовать в названии ЧПУ вместо пробела: тире (дефис) или нижнее подчеркивание? Давайте сравним.

Тире (дефис) в ЧПУ устанавливается нажатием одной клавиши минус и служит разделителем. Кликните два раза подряд на слово, и оно выделится ровно до появления тире.

mysite.ru/mama-papa-ya

Функционально дефис выполняет ту же роль, что и пробел, однако, он может иметь собственное смысловое значение к конструкции ЧПУ.

Нижнее подчеркивание в ЧПУ требует нажатия комбинации двух клавиш Shift и минус (+1 лишнее действие). Кликните два раза подряд на любую часть строки и выделится вся строка как будто это одно слово.

mysite.ru/mama_papa_ya

Нижнее подчеркивание не имеет собственного смыслового значения в конструкции ЧПУ и может использоваться как замена пробела.

Поисковые системы понимают и тире «-», и нижнее подчеркивание «_». Используйте то, что ближе вам.

ЧПУ картинок, видео, документов

Когда поисковая система находит изображение или любой другой документ, она скачивает файл и анализирует всю информацию о нем. Название файла имеет большое значение, так как сообщает о его содержимом, что в случае с изображениями может быть единственным источником информации о нем. Аналогично ЧПУ адресов страниц, если изображение имеет название:

7982403.jpg

то оно передает меньше информации о своем содержимом, нежели изображение с ЧПУ названием:

ptichka-na-provode.jpg

Поисковые системы могут различить содержимое изображения по тематике страницы, по тексту, который окружает картинку, по атрибуту alt-картинки, по названию картинки, метаданным изображения, по сравнению изображения с другими похожими изображениями и т.д. Наша задача — придать как можно больше информации о изображении поисковой системе, чтобы она лучше индексировалась и передавала больше ценности контенту и странице. По сути, изображение на сайте тоже имеет свой уникальный адрес, является документом, как и страница сайта, и к нему применяются те же требования по ЧПУ. Так что ЧПУ картинок — мастхев.

Обязательно читайте подробную статью про SEO оптимизацию картинок.

Подведем итог

  1. Мы можем использовать ключевые слова в названии страниц, чтобы упростить навигацию на сайте и понимание содержимого ссылки на сайт.
  2. Поисковые системы понимают ключевые слова в ЧПУ, выделяют ЧПУ адреса в поиске, что в целом повышает релевантность страницы.
  3. Посетители проще запоминают названия страниц, чаще заходят напрямую и делятся страницами с ЧПУ адресами.
  4. ЧПУ повышает CTR сниппета страницы в поиске, что улучшает поведенческие факторы.
  5. ЧПУ улучшает SEO страниц, изображений и других документов, так как является значительным фактором поисковой оптимизации.

Еще нужны причины, чтобы использовать ЧПУ?

Вот вроде бы и все, если что забыл — пишите в комментах.
Ставьте лайк, сохраняйте себе на стену.

convertmonster.ru

Важные моменты при использовании ЧПУ

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

Организация структуры ЧПУ-адресов

На организацию структуры ЧПУ-адресов оказывает влияние тип сайта. Адреса вида /pagename/ подходит для разделов: «Контакты», «Информация», «Доставка» и прочих статических страниц в контент-проектах и интернет-магазинах. Применим на любых типах сайта.

Адреса вида /pagename.html также подойдёт для статических страниц сайтов любых типов, но ещё и может обозначать различные рубрики. Например, «Мебель», «Отзывы», «Интервью» в интернет-магазинах либо в контент-проектах.

Следующий шаблон /id/title используется в основном для динамических страниц сайтов, имеющих единственную рубрику, но вполне применим и для статических страниц обзорного или новостного ресурса. Примером может служить: /2442/raskrutka-saitov. Правда у ID записи есть один минус – человеку его сложно запомнить. Зато в новостных проектах ID позволяет уникализировать адрес, закрепив его за конкретной статьей. Хотя в ЧПУ-адресах рекомендуется для простоты их передачи и запоминания ID убирать, а при необходимости, чтобы сделать заголовок уникальным, следует добавить к нему порядковый номер.

Если в проекте важна актуальность материала, то целесообразно в ЧПУ-адресах проставлять даты. Шаблон вида: /year/month/day/title.html сразу поможет отфильтровать новые данные по точной дате или, наоборот, быстро получить доступ в поисковике к статьям прошлых лет. Данный шаблон идеально подходит не только для новостных ресурсов, но и для блогов.

Пример ЧПУ-адресов на новостном сайте

В интернет-магазинах, новостных проектах или дневниках часто применяется шаблон, в котором отображена навигационная цепочка и определена иерархия объектов. Например, /category/subcategory/title облегчит жизнь и веб-мастеру во время закрепления адресов за статьями или товарами, и пользователю при навигации.

ЧПУ помогает пользователям в навигации по разделам сайта

Итак, лучше всего при проектировании выбрать сначала основные рубрики сайта, затем определить их подрубрики и, наконец, элементы этих подрубрик. Организация ЧПУ строится так, чтобы по адресу становилась ясна структура сайта. В городском портале, например, приемлемы рубрики: /news/, /poster/, /job/, /sport/, /gallery/, /forum/. Каждый раздел целесообразно детализировать: /sport/football/ или /sport/figure-skating/luzniki. Те же рекомендации относятся к сайтам, имеющим иерархическую структуру.

Латиница, кириллица и транслит?

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

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

Латинское ЧПУ подходит для статических страниц, обозначений новостных рубрик или разделов «Контакты», по той простой причине, что пользователи уже привыкли к обозначениям /news/ или /contacts/. Для названия статей латиницу применяют гораздо реже.

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

Длина ЧПУ адреса

В плане юзабилити из-за трудности запоминания длинные ЧПУ-адреса не удобны. К тому же они часто обрезаются во время вставки ссылки в социальных сетях.

Оптимальная длина ЧПУ должна составлять от 60 до 80 символов, и, естественно, чем меньше она будет, тем удобнее оперировать таким адресом. Таким образом, не стоит в ЧПУ отображать всю структуру сайта (например, подкатегории товара в интернет-магазине). Достаточно ограничиться первой и последней или одной из подкатегорий.

Разделение слов в ЧПУ

В ЧПУ не принято использовать пробелы для связи слов, обычно для этих целе используется дефис (-) или нижнее подчеркивание (_). Это позволяет без труда распознавать адреса страниц как пользователям, там и поисковым системам.

ЧПУ для мультиязычного сайта

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

http://www.apple.com/ru/mac/

http://www.apple.com/de/mac/

http://www.apple.com/fr/mac/

Реализация ЧПУ на сайте компании Apple

ЧПУ для видео и картинок

ЧПУ-адреса изображений или видео используются не настолько активно, как для создания страниц. К тому же по имени папки может найти изображение только поисковая система Google, поэтому если планируется получать на сайт трафик с поиска по видео или каких-либо других изображений, то важно лишь их название, а не сам путь, хранящий видео-файл. Поэтому, например, prodvigenie.jpg вместо ряда цифр со значком подчеркивания между ними будет вполне достаточно.

Ошибки при применении ЧПУ

Итак, попробуем подытожить, какие ошибки допускаются чаще всего при использовании ЧПУ-адресов:

  • пробелы и служебные символы.
  • слишком длинные ЧПУ-адреса.
  • цифровые значения в ЧПУ-адресе.
  • использование не значимых слов. В качестве примера можно отметить url-адреса, содержащие /category/ или /page/ данные слова не имеют особого значения, но увеличивают общую длину адреса.

Итак, в оптимальном ЧПУ-адресе содержатся однотипные символы на кириллице, латинице или транслитерации, а среди разделяющих знаков нет ни кавычек, ни пробелов, ни запятых, ни прочих служебных символов.

uniofweb.ru

Что такое ЧПУ?

ЧПУ (расш. Человеко-понятный урл) – красивые и дружелюбные URL адреса (Friendly SEO URL с англ.). Как бы не называлась эта аббревиатура, У ЧПУ адресов много преимуществ по сравнению с другими URL, поэтому их важно использовать на своих сайтах.

Зачем нужен ЧПУ?

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

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

Плюсы использования ЧПУ ссылок

  • Поисковыми системами хорошо воспринимается ЧПУ адрес страницы, и даже ключевые слова подсвечиваются в самой ссылке;
  • Пользователи легко воспринимают URL сайт, благодаря чему могут копировать ссылку и делится ею в социальных сетях;
  • Улучшение навигации на сайте, благодаря понятному ЧПУ и уровню вложенности.

Минусы использования

  • Если у вас сайт не сделан на платформе CMS (например: WordPress, Joomla) указывать ЧПУ придется вручную для каждой страницы. Это занимает очень много времени, особенно если у вас страниц более 100. По умолчанию в CMS WordPress ЧПУ можно настроить самому, как угодно. Чуть ниже я расписал подробнее.
  • Ручное выполнение транслитерации (Но в WordPress решается с помощью плагина CyrToLat).

Читайте в нашем блоге: Как стать заметным на выдаче с помощью микроразметки?

Пример правильного написания ЧПУ ссылок

Как выглядит ссылка без ЧПУ:

http://site.ru/?p=1234
http://site.ru/?p=999

Примеры ЧПУ:

http://site.ru/blog/statya-pro-chpu/
http://site.ru/kak-propisat-title/

Принципы написания ЧПУ адреса:

Вхождение ключевого слова. При вводе определенного запроса в поисковую систему в выдаче некоторые сайты появляются с подсвечиваемыми ключевыми словами в URL адресе страницы. Поэтому этот момент стоить учитывать.

ЧПУ должен быть краток и понятен. Глядя на ЧПУ мы должны понимать, о чем данная страница, чтобы не возникало путаниц.

Структура ЧПУ взаимосвязана с хлебными крошками (breadcrumbs). Особенно это касается интернет-магазинов, где страницы такого вида:

Страницы товара

https://site.com/collections/dolls/products/paw-patrol-on-a-roll-chase-figure-and-vehicle-with-sounds

Страница категории:

https://site.com/collections/dolls/

Что касается корпоративных сайтов, то ЧПУ для страниц услуг выглядит так, иногда он вообще не содержит УВ меньше 1.

http://site.ru/uslugi/pokupka-nedvizhimosti/

Про уровень вложенности я расписал в данной статье.

Кириллические ЧПУ

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

Недостаток – закодированных значения URL-адреса при копировании его из любого браузера.

Латинские ЧПУ

Перевод на латиницу. Как правило используются в рубриках и категориях.

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

Примеры:

http://site.ru/blog/seo-optimization/
http://site.ru/copywriting/original-content/

Транслитерация ЧПУ

Это необходимо для того, чтобы переводить кириллические ЧПУ в латиницу. Транслируемые адреса так же читаются поисковыми системами и подсвечиваются в выдаче.

Подчеркивания, дефисы и пробелы в ЧПУ

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

По поводу пробелов: не стоит их употреблять вообще, так как в дальнейшем могут возникнуть проблемы с индексацией таких URL-адресов.

Читайте в нашем блоге: Как выглядит СДЛ — Сайт для людей?

Настройка ЧПУ в WordPress

Итак, давайте разберем как настроить ЧПУ в CMS WordPress. По умолчанию он входит в сборку, поэтому ничего устанавливать дополнительно не нужно. Единственно что нам понадобится это плагин CyrToLat.

Настройку ЧПУ на WordPress

Заходим в Настройки и в выпадающим меню выбираем постоянные ссылки.

Далее указываем вид нашей ссылки. Разберем каждый из них:

По умолчанию – этот вид чаще всего встречается на сайтах WordPress и имеет вид site.ru/?p=123;

День и название – вывод даты и затем уже выводится ЧПУ. Если у вас СМИ или тематика сайта связана с постоянными ежедневными событиями, то лучше использовать данный вариант;

Месяц и год + название – вывод месяца и даты, а затем уже идет ЧПУ. Очень часто встречающийся вариант на многих сайтах WordPress;

Цифры – выводится цифры, и статья попадает в категорию архива. Не рекомендую использовать этот вариант UR;

Название страницы – выводится только ЧПУ. По сути самый правильный вариант вывода ссылки. Вид: site.ru/sample-post/;

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

Ну и соответственно жмем сохранить. Теперь при создании новой записи у нас автоматически формироваться определенный ЧПУ. Но он будет кириллический, чтобы перевести его в латиницу нам поможет плагин CyrToLat.

Настройка плагина CyrToLat

Итак, как же настроить все это дело? Для этого заходим в Плагины. Далее нажимаем добавить новый и выбираем там CyrToLat. После находим этот плагин, выбираем “Установить” и позже нажимаем Активировать”.

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

Частые ошибки в ЧПУ

Длина URL. Средняя длина в поисковой системе Google – 76-90 символов. Соответственно пишите ЧПУ не более 60 символов, чтобы поисковики могли воспринимать полностью ваш URL. Если слишком длинный URL он обрезается и выводится неполностью.

Пример длинного ЧПУ:

http://site.ru/sport/echampionship/1365520-fotogalereya-ahtung-podruga-igroka-sbornoj-germanii-ispug….

  1. Использование пробелов и символов не несущих пользу

Применение слов, которые не несут смыслового значения для посетителя, например /category/, /page/ и так далее.

Какие работы можно еще выполнить по внутренней оптимизации сайта:

Как правильно прописать Title страницы

Rel Canonical – как правильно использовать
ALT картинки — как правильно прописать
Мета-тег Description — разбор с примерами
LSI и SEO тексты – 5 основных отличий

Заключение

Проблемы с ЧПУ в основном встречаются на старых не обновляемых CMS. В новых платформах всё продумано (особенно в WordPress) и даже моем нелюбимом Opencart есть дополнительные модули, которые позволяют сделать нормальный ЧПУ. Поэтому использовать ЧПУ обязательно рекомендую вам.

Если статья была для вас полезна, то поделитесь с друзьями. В комментариях оставляйте ответы на вопрос: “А как вы настраиваете ЧПУ?”

edison.bz

Зачем нужна настройка URL ссылок в удобные для восприятия человеком ЧПУ?

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

	http://www.softmaker.kz.php?id=2  

К сожалению такие URL адреса не просто запомнить. Попробуйте сказать такой адрес, например по телефону. Поисковые системы, как и пользователи вашего сайта вряд ли получат информацию о содержании страницы вашего сайта из такого веб-адреса. Пользователь не сможет понять, что он найдет статью c примерами программирования в PHP. Более привлекательные URL адреса являются установленными по умолчанию во многих CMS (Content Management System — система управления содержимым). Например, такой адрес:

	http://www.softmaker.kz/id/2  

Конечно, такой адрес URL вносит больше ясности и он короче. Поэтому его легче запомнить и намного
легче прочесть, но по нему не скажешь точно, куда он ведёт. Но можно использовать другой вариант:

	http://www.softmaker.kz/PHP/PHP-Examples/  

Теперь, используя этот URL пользователь сможет понять, что он сможет прочитать и найти на странице. Поисковик тоже может разбить этот URL адрес на слова, чтобы лучше определить содержание страницы. (дефис «-» в URL адресе воспринимается поисковой системой, как пробел, а знак подчёркивания «_», как символ). Согласитесь, такой URL адрес легче запомнить и передать другому человеку.

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

ЧПУ адреса на сайте — какие инструменты необходимы?

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

Сервер Apache простая система, в которой есть ваозможность настройки ЧПУ ссылок (URL) в удобные для восприятия человеком. Обычно он поставляется со встроенным модулем для настройки ЧПУ адресов, mod_rewrite.

Сервер Майкрософт IIS, не имеет встроенной системы для настройки ЧПУ адресов, но имеет дополнение, которое поддерживает эту возможность. ISAPI_Rewrite очень похожа по функциональность с mod_rewrite.

Код, который мы будем рассматривать, основан на настройке ЧПУ ссылок в mod_rewrite сервера Apache.

Основные сведения о настройке ЧПУ ссылок на PHP сайте

Для начала рассмотрим простой пример. На сайте есть php-файл, который открывает одну страницу. Его URL адрес такой:

	http://www.softmaker.kz/article_CSS_example.php/  

Но нам нужно улучшить адрес для восприятия и мы хотим сделать так:

	http://www.softmaker.kz/article-CSS/  

Чтобы так получилось нужно указать серверу сделать внутреннее перенаправление всех запросов с адреса «article-CSS» на адрес «article_CSS_example.php». Нужно, чтобы такое перенаправление было внутренним, так как ни к чему, чтобы в адресной строке браузера что-то менялось.

Но для начала, необходимо создать текстовый документ с наименованием «.htaccess», который будет содержать правила настройки ЧПУ ссылок (URL) в удобные для восприятия человеком. Файл должен быть названн именно так «.htaccess» с точкой вначале названия, но не «.htaccess.php» или «php.htaccess». Файл «.htaccess» нужно положить в корневую папку вашего сервера, такую же, где лежит файл из нашего примера article_CSS_example.php. Но если файл «.htaccess» уже лежит в корневой папке, то лучше его начать редактировать, чем перезаписать новым.

Файл .htaccess является конфигурационным файлом для сервера. Если в нём допущена ошибка, тогда сервер вернёт сообщение об ошибке. Обычно это ошибка с кодом 500. Если передавать файл .htaccess на сервер, используя FTP, то нужно помнить, что он передается в режиме ASCII, а не в бинарном режиме (BINARY). В файле .htaccess мы будем выполнять два правила. Первое — включение режима RewriteEngine, второе — указание серверу Apache, какое именно правило ему нужно выполнить.

	RewriteEngine On # Включение режима  	RewriteRule ^article-CSS/?$ article_CSS_example.php [NC,L]  	# Управление запросами для «article-CSS»  

Также нужно знать, что всё что находится за символом «#» является комментарием, т.е сервер пропускает мимо всё, что находится за этим символом. Комментариями нужно пользоваться свободно, чтобы потом можно было быстро вспомнить, как это правило работает и для чего его вообще написали. Также в каждом файле «.htaccess» должна быть только одна строчка с включением режима «RewriteEngine».

Поговорим немного об инструкции «RewriteBase». С помощью нее мы преобразуем URL сервера к физическому пути. Если URL вашего сервера не соответствуют физическим путям к файлам, вы должны использовать «RewriteBase» в каждом из «.htaccess» файлов, где вы хотите использовать директивы «RewriteRule».

Предположим, что файл «.htaccess» лежит в /physical/path/.htaccess. Помните: /physical/path это физический путь. Также у вашего сервера настроен алиас:

	Alias /virtual /physical/path  

Тогда даем вашему серверу знать, что мы работаем через /virtual, а не через префикс физического пути /physical/path. В файле «.htaccess» пишем:

	RewriteEngine On  	RewriteBase /virtual  

После этого правила преобразований будут работать следующим образом:

	RewriteRule ^article.php$ post.php  

В примере выше, запрос к /virtual/article.php корректно преобразуется в физический файл /physical/path/post.php.

А теперь давайте подробнее рассмотрим, как работает инструкция «RewriteRule»:

  • RewriteRule — указывает серверу Apache о начале одного правила.
  • ^/article-CSS/?$ — Это шаблон. Сервер проверяет URL адреса каждого запроса и сравнивает с шаблоном. Если адрес совпадает, то сервер Apache меняет URL адрес запроса на то что находиться в следующем параметре.
  • article_CSS_example.php — Параметр замены. Если шаблон совпадает с запросом, сервер Apache использует этот URL адрес вместо адреса запроса.
  • [NC,L] — Это флаги, которые указывают серверу Apache как применять правило. Сейчас мы используем два флага. Флаг «NC» указывают серверу Apache, что правило не зависит от регистра символов (в адресе запроса могут быть, как прописные, так и строчные буквы). Флаг «L» указывают серверу Apache, что нужно остановить процесс преобразования.
  • # Управление запросами для «article-CSS» — Комментарий объясняет, что делает правило (рекомендуется использовать).

Это правило является простым способом настройки преобразования одного URL адреса в другой. Оно является основой для многих правил преобразования ЧПУ ссылок (URL) в удобные для восприятия человеком.

Шаблоны и параметры замены для преобразования в ЧПУ ссылки

Пример, который мы рассмотрели выше позволяет перенаправлять запросы для одного URL адреса. Но мощь режима mod_rewrite заключается в том, что он позволяет преобразовывать целые группы запросов URL адресов сверяя их с шаблоном, который записан в правиле. Предположим, что нужно изменить все URL адреса сайта. Возьмем пример из первой части статьи. У нас имеется URL адрес сайта:

	http://www.softmaker.kz.php?id=2  

И мы хотим преобразовать его к следующему виду:

	http://www.softmaker.kz/id/2  

Чтобы не писать правило для каждой статьи id необходимо написать правило, чтобы управлять всеми cтатьями. Поэтому нужно изменить правило к следующему виду:

	http://www.softmaker.kz.php?id={номер}  

Нужно изменить этот URL адрес так:

	http://www.softmaker.kz/id/{номер}/  

Чтобы сделать это нужно использовать регулярные выражения. Они являются шаблонами (паттернами, от англ. pattern), определёнными в формате, который сервер может понимать. Вот обычный паттерн, который определяет число:

	[0-9]+  

Квадратные скобки содержат в себе определенный диапазон сиволов и «0-9» указывает на все числа. Симвлол плюс «+» указывает, что в шаблоне может быть одно или более чисел, стоящих перед знаком «+». Этот шаблон подходит для нашей задачи по поиску числовых категорий в URL адресе PHP сайта. Шаблон этого правила рассматривается как регулярное выражение по умолчанию, поэтому нет надобности где-либо указывать, что он включен или активирован.

	RewriteRule ^id/([0-9]+)/?$ articles.php?id=$1 [NC,L]  	# Управление запросом по категориям  

Первое, что можно отметить, так это шаблон взятый в круглые скобки. Он позволяет нам получить обратную ссылку для параметра замены. Выражение «$1» в параметре замены указывает серверу Apache брать из URL адреса всё то, что в скобках шаблона. Можно задать множество обратных ссылок и они будут пронумерованы в порядке появления в шаблоне. Итак, это правило означает, что сервер Apache переправит все запросы для
softmaker.kz/id/{номер}/ на articles.php?id={тот же номер}.

Как используются регулярные выражения для преобразования URL адресов в ЧПУ

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

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

Следующий пример правила не просто сравнивает URL ссылки «rss.xml», как таковой, а также происхдит сравнение «rss1xml», «rss-xml» и так далее.

	RewriteRule ^rss.xml$ rss.php [NC,L] # Изменение URL ссылки фида  

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

	RewriteRule ^rss.xml$ rss.php [NC,L]  	# Изменение URL ссылки фида  

Экранирование применимо только для шаблонов и в параметрах замены не используется. Остальные символы, которые следует экранировать, называются метасимволами:

  • . (любой символ, кроме перевода строки (по умолчанию))
  • * (квантификатор, означающий ноль или более вхождений)
  • + (квантификатор, означающий одно или более вхождений)
  • {} (начало и конец количественного квантификатора)
  • ? (расширяет смысл метасимвола, является также квантификатором, означающим отсутствие либо ровно 1 вхождение, также преобразует жадные квантификаторы в ленивые)
  • ! (в начале строки означает отрицание шаблона)
  • ^ (начало строки или отрицание, если находится в начале диапазона)
  • $ (конец строки)
  • [] (сравнивает любое содержание, начало и конец описания символьного класса)
  • — (диапазон, если используется между квадратными скобками)
  • () (начало и конец группы, группа обратной ссылки)
  • | (альтернативный выбор, или)
  • (экранирующий символ)

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

	http://www.softmaker.kz/PHP-Examples/  

И мы хотим указать серверу заменить этот URL адрес, но по всем статьям в категории PHP:

	http://www.softmaker.kz.php?id=PHP-Examples  

Сделать это можно с помощью следующего правила:

	RewriteRule ^PHP/([A-Za-z0-9-]+)/?$ articles.php?id=$1 [NC,L]  	# Обработка статей  

В этом правиле каждый URL адрес будет перенаправлен, если начинается с «PHP», с одного или более (+) разных символов: литералов, чисел и дефисов ([A-Za-z0-9-]) (заметьте, что дефис в конце выбора символов находится внутри квадратных скобок, но он будет определен, как литерал (буквенный символ), но не как разделитель диапазона). И указываем ссылку на категорию в скобках, как «$1» в параметре замены. Теперь сделаем правило общее для всех статей, независимо от категории, то есть, если в адресе будет указана папка отличная от «PHP», скрипт будет работать:

RewriteRule ^[A-Za-z-]+/([A-Za-z0-9-]+)/?$ articles.php?id=$1 [NC,L]  # Обработка всех статей  

Итак, мы заменили «PHP» с помощью шаблона, в котором сравниваются символы и дефисы. Но сейчас сравнение происходит не только с папкой «PHP», но и с другими папками, которые соответствуют шаблону сравнения по символам и дефисам.

Флаги в правилах замены ссылок на ЧПУ

Флаги, которые добавляются в конец правил настройки ссылок ЧПУ указывают серверу Apache, как нужно понимать правило и управлять им. Правила могут быть использованы, чтобы указать серверу Apache, например, использовать ли правило независимо от регистра символов (в адресе запроса могут быть, как прописные, так и строчные буквы). Также можно указать Apache остановить текущее сравнение и так далее. Ниже приведён список флагов, которые используются в правилах:

  • C (связывать текущее правило со следующим)
  • CO=cookie (устанавливать cookie)
  • E=var:value (установить переменную окружения «var» по значению «value»)
  • F (запрещает URL — отсылая в загловок код 403)
  • G (страница больше не существует)
  • L (последнее правило, остановить процесс преобразований)
  • N (следующее правило — переход на первое правило)
  • NC (правило независимо от регистра символов, могут быть, как прописные, так и строчные буквы)
  • NE (не экранировать URL адрес при выводе)
  • NS (пропускать правило, если это подзапрос)
  • P (вызывает прокси, пропускает параметр замены через прокси модуль)
  • PT (используется, когда URL проходит через дополнительный обработчик, например, mod_alias)
  • R (временно перемещенная страница — отсылает в заголовок HTTP код 302, по умолчанию)
  • R=301 (навсегда перемещён на новый URL адрес)
  • QSA (добавляет строку параметров запроса к адресу URL параметра замены)
  • S=x (пропускает следующее x количество правил)
  • T=mime-type (принудительно устанавливает тип mime)

Перенаправление содержания страницы на новый URL адрес

RewriteRule ^article/?$ http://www.novyi-domen.kz/article/ [R,NC,L]  # Временно перемещённая страница  

С помощью флага «R» мы изменяем работу дерективы RewriteRule. Вместо внутреннего изменения URL, сервер Apache возвращает в HTTP заголовок сообщение о том, что страница перемещена временно на новый URL адрес, указанный в параметре замены, независимо от того какая была указана URL ссылка, обсолютная или относительная. Заголовок отсыдается обратно включая код 302, который указывает на временное перемещение контента страницы.

RewriteRule ^article/?$ http://www.novyi-domen.kz/article/ [R=301,NC,L]  # Навсегда перемещён на новый URL адрес  

Если нужно переместить навсегда, то к флагу «R» добавляем строку «=301», тогда сервер Апаче отправит заголовок, указывающий на постоянное перемещение данного контента. В отличие от значения по умолчанию флага «R», «R=301» укажет браузеру показать новую URL ссылку в адресной строке. Перенаправление контента является самым распространённым способом настройки URL адресов.

Условия для правил перенаправлвения с простого URL на ЧПУ

В правилах настройки ЧПУ может быть установлено одно или несколько условий и они будут исполняться последовательно. Это позволяет добавить только определённые правила для подмножества запросов. Условия позволяют разнобразить использование правил настройки ЧПУ, например, можно использовать правила настройки к поддоменам или алтьтернативным доменам, а не только к URL адресам. Вот пример:

	RewriteCond %{HTTP_HOST} ^softmaker.kz [NC]  	RewriteRule ^(.*)$ http://www.softmaker.kz/$1 [L,R=301]  

Это правило перенаправляет все запросы на тот же самый URL адрес вида «www.softmaker.kz». Без этого правила произошло бы зацикливание, потому что каждый запрос постоянно соответствовал бы правилу и отправлялся бы сам на себя. Это правило служит для перенаправления запросов с URL адресами без «www», а условие, стоящее перед правилом выполняет эту задачу.

Условия обрабатываются так же, как и правила. Правило начинаетсч с дерективы «RewriteCond» и указывает модулю mod_rewrite, что строка является правилом. Первым параметром является то, что должно проверятся, вторым параметром является шаблон с которым происходит сравнение. В конце, в квадратных скобках указываются флаги, как и в дерективе «RewriteRule». Первым параметром могут быть разные значения, например проверка домена, какой используется браузер, IP адрес и так далее. В подзаголовке Использование серверных переменных в правилах настройки ЧПУ можно увидеть все варианты, с которыми производится сравнение.

Шаблон в дерективе «RewriteCond» почти всегда используется так же, как и в дерективе «RewriteRule» только в некоторых случаях по-другому. Первый параметр не является шаблоном, если начинается со специального символа, описанного в подзаголовке Исключения и дополнения в услвиях правил настройки ЧПУ. Значит, если нужно использовать регулярные выражения в шаблоне, который начинается с символов «<», «>» или дефиса, то необходимо экранировать их обратным слэшем.

Условия настройки URL адресов в ЧПУ могут, как и правила, содержать в себе флаги, но только два: «NC» и «OR». Флаг «NC», как и в правилах, указывает серверу Apache, что правило не зависит от регистра символов (в адресе запроса могут быть, как прописные, так и строчные буквы). Флаг «OR» используется, когда нужно указать, что несколько условий выполняются для одного правила. По умолчанию, без флага «OR», должны совпасть все условия, тогда правило будет выполнено. С флагом «OR», достаточно выполнения одного из них.

	RewriteCond %{HTTP_HOST} ^m.softmaker.kz [OR]  	RewriteCond %{HTTP_HOST} ^en.softmaker.kz [OR]  	RewriteCond %{HTTP_HOST} ^kz.softmaker.kz  	RewriteRule ^(.*)$ http://www.softmaker.kz/$1 [L,R=301]  	# Правило выполниться, если совпадёт хотя бы одно условие  

Исключения и дополнения в услвиях правил настройки ЧПУ

Условия в правилах настройки ЧПУ обычно сравниваются по шаблону регулярных выражений. Но можно ещё использовать другие способы задания условий с помощью следующих дополнений:

  • «!Шаблон» (проверяемая строка несоответствует шаблону)
  • «<Шаблон» (проверяемая строка лексически меньше шаблона)
  • «>Шаблон» (проверяемая строка лексически больше шаблона)
  • «=Шаблон» (проверяемая строка равна шаблону)
  • «-d» (является ли проверяемая строка каталогом)
  • «-f» (является ли проверяемая строка файлом)
  • «-s» (является ли проверяемая строка по размеру больше нуля)
  • «-l» (является ли проверяемая строка символической ссылкой)
  • «-F» (является ли проверяемая строка файлом, проверка через подзапрос)
  • «-U» (является ли проверяемая строка URL, проверка через подзапрос)

Использование серверных переменных в правилах настройки ЧПУ

Серверные переменные это набор элементов, которые проверяются в условия настройки ЧПУ. Использование этих переменных позволяет применять правила основанные на разных параметрах запросов, включая определение параметров браузера, параметров URL и определение множества других строковых значений. Синтаксис написания выглядит следующим образом:

	%{ИМЯ_ПЕРЕМЕННОЙ}  

В условиях правил настройки «ИМЯ_ПЕРЕМЕННОЙ» заменяется на следующие значения:

  • Заголовки HTTP
    • HTTP_USER_AGENT
    • HTTP_REFERER
    • HTTP_COOKIE
    • HTTP_FORWARDED
    • HTTP_HOST
    • HTTP_PROXY_CONNECTION
    • HTTP_ACCEPT
  • Переменные соединения
    • REMOTE_ADDR
    • REMOTE_HOST
    • REMOTE_USER
    • REMOTE_IDENT
    • REQUEST_METHOD
    • SCRIPT_FILENAME
    • PATH_INFO
    • QUERY_STRING
    • AUTH_TYPE
  • Внутренние переменные сервера
    • DOCUMENT_ROOT
    • SERVER_ADMIN
    • SERVER_NAME
    • SERVER_ADDR
    • SERVER_PORT
    • SERVER_PROTOCOL
    • SERVER_SOFTWARE
  • Переменные даты и времени
    • TIME_YEAR
    • TIME_MON
    • TIME_DAY
    • TIME_HOUR
    • TIME_MIN
    • TIME_SEC
    • TIME_WDAY
    • TIME
  • Специальные переменные
    • API_VERSION
    • THE_REQUEST
    • REQUEST_URI
    • REQUEST_FILENAME
    • IS_SUBREQ

Настройка ЧПУ ссылок с использованием нескольких правил

Чем сложнее структура сайта, тем сложнее нужно настраивать правила для этого сайта. Особенно трудно разрешать противоречия между правилами. Часто возникают противоречия, когда добавляется новое правило в файл .htaccess. В таком случае можно заметить, что новое правило само по себе рабочее и правило, добавленное ранее в файл соответствует URL адресу, но этот URL адрес противоречит новому правилу.

	RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$  	files.php?cat_name=$1&file_title=$2 [NC,L]  	# Обработка закачки блога  	RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$  	articles.php?cat_name=$1&article_title=$2 [NC,L]  	# Обработка статьи блога  

В этом примере страница закачки и страница статьи имеют одинаковые шаблоны. Второе правило никогда не совпадёт с URL адресом, так как всё, что должна быть проверено этим правилом будет перехвачено первым. Есть несколько способов обойти это противоречие. В некоторых CMS легко (включая, wordpress) справляются с этой ситуацией, дополнительно добавляя к каждому запросу свою строку:

	RewriteRule ^files/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$  	files.php?cat_name=$1&file_title=$2 [NC,L]  	# Обработка закачки блога  	RewriteRule ^articles/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$  	articles.php?cat_name=$1&file_title=$2 [NC,L]  	# Обработка статьи блога  

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

	RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$  	files_or_articles.php?cat_name=$1&blog_name=$2 [NC,L]  	# Обработка запроса по закачке и по статье блога  

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

	# Обработка статьи блога  	RewriteRule ^articles/([A-Za-z0-9-]+)/([A-Za-z0-9-]+).html$  	articles.php?cat_name=$1&file_name=$2 [NC,L]  	# Обработка страниц статей в разделе  	RewriteRule ^articles/([0-9]+)/$ articles.php?page=$1 [NC,L]  

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

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

	# Обработка страниц статей в разделе  	RewriteRule ^articles/([0-9]+)/$ articles.php?page=$1 [NC,L]  	# Обработка статьи блога  	RewriteRule ^articles/([A-Za-z0-9-]+)/([A-Za-z0-9-]+).html$  	articles.php?cat_name=$1&file_name=$2 [NC,L]  

site.softmaker.kz


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.