Чпу ссылки


Массовая версия генератора seo url

SEO URL — это адрес страницы который может понять не только робот, но и человек, так называемый человекопонятный URL (ЧПУ).

Основные преимущества SEO URL:

  1. Наличие ключевых фраз (ключей) в URL, соответственно чуть больший вес страницы в выдаче.
  2. Возможность перехода из адресной строки на страницу, запомнив адрес первой, например, для этого сайта запоминается так, название, инструменты, seo-url wd5.ru/tools/seo-url/

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

Поисковая система при очень большом числе seo ориентированных фраз может так же посчитать url «заспамленным», таким образом вместо плюсов получим минусы.

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

Нижнее подчеркивание пришло из технических текстов, например вот_так, при чтении оно похоже на пробел, это же свойство нижнего подчеркивания пытались перенести на URL но не «прижилось».


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

поэтому в SEO URL принято использовать знак «-» (тире).

Для робота СлоВо с большими буквами и слово с маленькими это разные адреса страниц, простые пользователи об этом просто не знают, поэтому SEO URL принято писать строчными буквами.

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

Использовать на конце знак косой черты «/» или нет, для поисковой системы не важно, так же как для человека. Хотя получается чуть длинее, но нужно внимательно следить чтобы страницы не дублировались, т.к. page/ и просто page это разные страницы для сервера и для робота.

О стандарте используемом для URL


URL (Uniform Resource Locator) — это уникальный адрес страницы, в котором разрешено использование только букв латинского алфавита, чисел и спецсимволов «_», «.», «-«.

Например, если в URL содержится слово «страница», то оно будет преобразовано в «%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0»

Символы «#», «&», «,», «:», «;», «=», «?» несут специальное синтаксическое значение, пробелы и русские буквы не разрешены и будут преобразованы в последовательности начинающиеся со знака «%» (RFC1738).

wd5.ru

Зачем нужна настройка 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

Зачем использовать ЧПУ.

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

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

Настройка ЧПУ и влияние на продвижение сайта.

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

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

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

Плюсы использования ЧПУ на сайте.

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

Минусы использования ЧПУ.

  • Необходимость настройки сервера и CMS под автоматическое составление ЧПУ для каждой новой статьи. На популярных движках сайтов это уже реализовано либо «из коробки», либо настраивается дополнительными модулями.
  • Установка дополнительных плагинов или программ, которые преобразуют название статьи в аналогичный веб-адрес.
  • Ручное выполнение транслитерации.

Как сделать ЧПУ ссылку — примеры.

Адреса, использующие ЧПУ:

  1. http://сайт/cvety-na-balkone/kak-vyrastit-rassa…
  2. http://сайт/tyulpany-v-domashnih-usloviyah.html…
  3. http://сайт/ru/stati/sadovodstvo/1888-kanny-pos…

Веб-страницы, без ЧПУ:

  1. http://сайт/?p=1145;
  2. http://сайт/?p=593;
  3. http://сайт/catalog/a/98-anthurium.html.

Организация структуры ЧПУ.

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

Есть шаблон /id/title. Он часто встречается, когда на сайте присутствуют только динамические страницы, то есть относящиеся к единственной рубрике. Также подходит и для статических страниц, особенно для новостных ресурсов. У адресов страниц с применением ID есть большой недостаток. Пользователи не могут его запомнить, поэтому надеяться на нахождение страницы через адрес в поиске нецелесообразно.

Когда материал актуален только для определенных дат, для пользователей число написания имеет решающее значение, в урл отражается шаблон вида /year/month/day/title.html. С его помощью при захождении в какую-либо категорию человек может сразу отфильтровать нужные сообщения, которые относятся к самым значимым или наоборот, приурочены к определенной дате, неделе, месяцу или году.

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

Почему кириллицу лучше не использовать?

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

Длина ЧПУ.

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

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

Пример:
— сайт/категория1/товар
— сайт/категория2/товар
В обоих случаях при переходе в карточку товара он должен открываться по одному адресу, например
— сайт/категория2/товар.

Разделение слов – какие символы лучше использовать?

При создании ЧПУ допустимо использование таких элементов: (-) и (_). Применение пробелов запрещается.

ЧПУ для контента – видео, картинки, документы.

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

Ошибки – чего не должно быть в ЧПУ.

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

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

www.ipipe.ru

Что такое чпу?

ЧПУ расшифровывается как понятные человеку урлы (URL). Данная Seo примочка пришла к нам от англоязычных оптимизаторов. У них есть Seo термин SEF (search engines friendly url), в переводе означает дружелюбная поисковым системам ссылка.

Привожу примеры НЕ дружелюбных ссылок (плюсы и минусы чпу ссылок я описал ниже):

[warning]http://site.ru/2012/03/%D0%BE-%D1%87%D0%B5%D0%BC-%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE-%D0%BF%D0%BE%D0%B9%D0%B4%D0%B5%D1%82-%D1%80%D0%B0%D0%B7%D0%B3%D0%BE%D0%B2%D0%BE%D1%80-%D0%B2-%D1%80%D1%83%D0%B1/

Такая на движке wordpress:

http://site.ru/?p=2

Такая на движке Joomla:

http://site.ru/index.php?option=com_content&task=view&id=34&Itemid=51

Такая на движке DLE:

http://site.ru.com/index.php?newsid=1234543[/warning]

Дружелюбными чпу ссылками считаются следующие типы:

http://site.ru/nazvanie_stati

http://site.ru/nazvanie_stati.html

http://site.ru/razdel/nazvanie_stati

http://site.ru/razdel/nazvanie_stati.html

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

Плюсы и минусы ЧПУ ссылок.

 

Давайте начнем с плюсов:

 

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

На примере ключевое слово в ссылке выглядит так:

ЧПУ внутренняя оптимизация

Как видите у конкурента ссылка не преобразована в чпу. И поисковая система Яндекс выделила жирным мою ссылку, что в принципе может повлиять на CTR (кликабельность ссылки), так как ссылка бросается в глаза. Если вы не сможете продвинуть ваш сайт самостоятельно, предлагаю вам: поисковое продвижение в агентстве Texterra.ru, здесь вам помогут продвинуть ваш сайт.

Минусы чпу ссылок:

 

  • Установка плагинов на популярные CMS (CMS для сайта визитки тут).
  • Увеличение нагрузки на сервер в результате установки плагинов.
  • Дубли страниц, поэтому необходимо составить правильный robots.txt.

Приготовление чпу ссылок на популярных движках:

 

1. ЧПУ WordPress:

Для установки дружелюбных url нам необходимо перейти в административную панель “wordpress” => “Параметры” => “Постоянные ссылки” и поставить галочку в пункте: “Произвольно”.

Далее в пустую строку вписать нужный нам форму отображения URL.ЧПУ wordpress

У меня стоит такая форма: “/%postname%/” — получаются ссылки типа: site.ru/имя_поста/.

[warning]Внимание! Имя поста будет на русском языке. Такие ссылки поисковая система будет показывать, как много непонятных символов.[/warning]

Данную проблему решает плагин: RusToLate, который меняет русские буквы на латиницу. Устанавливается всегда по трем шагам.

  1. Скачиваем RusToLate можно отсюда. С помощью FTP скидываете в wp-content/plugins/.
  2. Входим в административную панель => “Плагины” => “Установленные”
  3. Находим наш плагин Rustolate и жмем активировать.

И уже ссылка будет такого вида : site.ru/imya_posta/. Такую ссылку поисковая система показывает в точной форме.

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

“/%category%/%postname%/”.

И ссылка будет такой:

site.ru/categoria/imya_posta.

Если вам необходимо что-то экзотическое то вот вам все коды, для построения URL ссылок:

— %year% — год создания темы (состоит из 4-х цифр);

— %monthnum% — месяц создания темы;

— %day% — день создания темы;

— %hour% — час создания темы;

— %minute% — минута создания темы;

— %second% — секунда создания темы;

— %postname% — преобразованное название темы (для корректной работы данного тега необходимо использование плагина RusToLat);

— %post_id% — уникальный идентификатор темы (необходим плагин RusToLat);

— %category% — преобразованное название категории, к которой относится тема (необходим плагин RusToLat);

— %author% — преобразованное имя автора темы.

Чтобы поставить в конце статьи суффикс html необходимо просто прописать: “/%postname%.html”.

Вообще пользуйтесь, а теперь пойдем к другой CMS.

2. ЧПУ Joomla.

Для Joomla настройка ЧПУ намного проще. Правда я говорю про версию Joomla 2.5.

Для того чтобы преобразовать не дружелюбный url в дружелюбный нужно перейти в административную панель joomla =>”сайт” => “общие настройки” => настройки SEO.

ЧПУ Joomla

  • Включить SEF – значение “Да” включает ЧПУ. Получаются ссылки вида:

site.ru/index.php/category/imya_posta/

  • Перенаправление — значение “Да” удаляет index.php из url. Для этого у вас на сервере должен стоять мод Apache — mod_rewrite. Получаются:

site.ru/category/imya_posta/

  • Добавлять суффикс — значение “Да” добавляет к вашим ссылкам на конец суффикс html. Получается:

site.ru/category/imya_posta.html

[warning]Внимание! Включение ЧПУ в Joomla может привести к ошибкам. Поэтому для начала испытайте его на вашем сайта расположенным на Денвере (как установить Денвер). Возможные причины ошибок: не включен модуль Апача mod_rewrite, не переписан htaccess.txt в .htaccess[/warning]

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

Посмотрите похожие посты:

webbomj.ru

Если Вы умеете немного кодить и пишите свои скрипты, я вам расскажу как легко сделать ЧПУ (человеко понятный урл) с помощью .htaccess.

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

Например, у нас есть ссылка на страницу новостей с ID номером новости:

http://site.ru/news.php?id=4

Чтобы сделать такой URL красивее и удобнее, придумали ЧПУ, т.е. представление адреса, например в таком виде:

http://site.ru/news/4/

Скажете не очень наглядно? А вот такой пример:

http://site.ru/index.php?do=article&name=kak-sdelat-chpu

а с ЧПУ:

http://site.ru/articles/kak-sdelat-chpu/

Сделать это очень просто. Для веб-серверов Apache, есть встроенный модуль mod_rewrite. На большинстве хостингов он есть, так же как и на денвере.

Создаем файл .htaccess и кладем его в корень сайта. Первой строкой в этом файле мы пишем:

RewriteEngine on

Эта строка включает модуль mod_rewrite. Далее, мы пишем сами условия куда и зачем обращаться. Для нашего первого примера, код будет выглядеть так:

RewriteEngine on
RewriteRule ^news/([0-9]+)/? news.php?id=$1 [L]

Он будет перенаправлять с http://site.ru/news/4/ сюда http://site.ru/news.php?id=4
Все эти условия обычно указываются в htaccess с помощью регулярных выражений.

По второму примеру, код будет выглядеть так:

RewriteEngine on
RewriteRule ^articles/([-a-zA-Z0-9_]+)/? index.php?do=article&name=$1 [L]

Т.е. с адреса http://site.ru/articles/kak-sdelat-chpu/ нас перебросит на http://site.ru/index.php?do=article&name=kak-sdelat-chpu. Точнее пользователь не увидит реального адреса, а увидит только наш ЧПУ.

Как видите, все достаточно просто — создаем файл htaccess, пишем две строчки и готово! :)

По регулярным выражениям меня не спрашивайте, я не шарю :) Знаю только:

[0-9]+ — это только для цифр

[-a-zA-Z0-9_]+ — это для латинских больших, маленьких, дефиса и подчеркивания

Если во соображаете в регулярных выражениях, Вам будет очень легко написать любое правило. А кто не соображает, тут нужно смотреть примеры, которые я привел и пробовать. Я вчера попробовал, получилось! Не сразу конечно, перерыл кучу инфы, но разобрался.

Надеюсь понятно описал. Будут вопросы, спрашивайте.

UPD by Hugo: Если использовать конструкцию [QSA,L], тогда ЧПУ сможет принимать GET запросы. Т.е. если мы будем без [QSA,L] передавать GET-параметр (http://site.ru/articles/kak-sdelat-chpu/?Get_param=1) то выкинет 404 ошибку. Чтобы этого не происходило и мы смогли принимать GET запросы, нужно:

Вместо этого:

RewriteRule ^news/([0-9]+)/? news.php?id=$1 [L]

Нужно написать [QSA,L] на конце:

RewriteRule ^news/([0-9]+)/? news.php?id=$1 [QSA,L]

crazy-russian.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


You May Also Like

About the Author: admind

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

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

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