Полный цикл в digital

Правила htaccess

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

Mod_rewrite - модуль, используемый веб-серверами для преобразования URL'ов. Для того, чтобы сервер принимал команды файла htaccess, нужно убедится в включении модуля mod_rewrite через просмотр конфигурации PHP функцией phpinfo().

Если нужно вести логи всех операций, выполненных с помощью mod_rewrite, можно активировать это с помощью следующей записи в httpd.conf:

RewriteLog /usr/local/apache/logs/mod_rewrite.log
RewriteLogLevel 1

Модификация URL в htaccess выполняется с помощью трех директив:

  1. RewriteBase указывает префикс адреса
  2. RewriteCond проверяет соответствие
  3. RewriteRule изменяет URL в соответствии с регулярным выражением если все правила соответствия подходят
  4. ErrorDocument у сервера Apache имеется стандартная директива обработки ошибок ErrorDocument, которая сопоставляет коду ошибки адрес документа, который будет показан пользователю

Сначала нужно включить Mod_Rewrite, на случай если модуль еще не активен:

RewriteEngine On

Укажем, что в качестве префикса для URL нужно использовать корень:

RewriteBase /

Редирект Redirect

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

Redirect код_редиректа /старая_страница /новая_страница
# 301 редирект с index.php на test.php
Redirect 301 /index.php /test.php

Переадресация RewriteRule

Правило преобразования URL, это условие и правило одновременно. Если вы посмотрите на синтаксис RewriteRule директивы, то увидите, что она содержит условие, которому должен соответствовать текущий URL, что бы это правило преобразования начало выполняться, и само по себе правило преобразования (это то как изменить текущий URL).

К правилу RewriteRule помимо условия, содержащегося в самом правиле (это условие запускает исполнение самого правила) можно задать дополнительные условия при помощи директив RewriteCond.

RewriteRule шаблон_поиска строка_подстановки [флаги]
# переадресация со всех запрашиваемых страниц на index.php
RewriteRule .+ index.php
# переадресация со всех запрашиваемых страниц кроме test.php на index.php
RewriteRule !test.php index.php
# переадресация со всех страниц которые заканчиваются на php или html на index.php
RewriteRule \.[phphtml] index.php
# тоже самое но с логическим оператором |
RewriteRule \.(php|html) index.php
# 301 редирект со страницы test.php на index.php через флаг
RewriteRule test\.php index\.php [R=301,L]
  1. шаблон_поиска условие, выполнение которого запускает исполнение правила, регулярное выражение которое применяется к текущему URL
  2. строка_подстановки алгоритм изменения URL,правило изменения(преобразования) URL
  3. [флаги] это разделённый запятыми, заглавные спец символы, заключенные в квадратные скобки. Флаги дополняют преобразование URL

Условие RewriteCond

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

Если из имеющихся для правила дополнительных условий хотя бы одно условие не выполняется это приводит к остановке запущенного процесса исполнения правила, и преобразование над URL, заданное в правиле, не выполняется. Что бы запущенное на исполнение правило выполнилось до конца и изменило URL, необходимо, что бы выполнились все дополнительные условия, указанные в директивах RewriteCond перед этим правилом!

Тут нужно дополнительно пояснить, что директивы RewriteCond по умолчанию объединены между собой оператором AND в одно составное условие. Просто этот оператор не записывается по умолчанию. От сюда и такая логика, что нужно, что бы все дополнительные условия были истинными (т.к. они объедены через AND) для удачного завершения преобразования URL.

RewriteCond строка_тестирования шаблон_условия [флаги]
# переадресация с страницы test.php на index.php
RewriteCond %{REQUEST_URI} test\.php
RewriteRule .+ index.php
# переадресация со всех запрашиваемых страниц кроме test.php на index.php
RewriteCond %{REQUEST_URI} !test\.php
RewriteRule .+ index.php
# переадресация со всех страниц которые заканчиваются на php или html на index.php с флагом [OR]
RewriteCond %{REQUEST_URI} \.php [OR]
RewriteCond %{REQUEST_URI} \.html
RewriteRule .+ index.php

Cтрока_тестирования это строка, которая может содержать следующие расширенные конструкции в дополнение к простому тексту:

  1. Обратные ссылки RewriteRule это обратные ссылки вида $N (0 <= N <= 9). С $1 по $9 обеспечивают доступ к сгруппированным частям (помещённым в скобки) Шаблона из RewriteRule, который является субъектом текущего набора условий RewriteCond. $0 предоставляет доступ к целой строке, совпавшей с этим Шаблоном
  2. Обратные ссылки RewriteCond это обратные ссылки вида %N (0 <= N <= 9). С %1 по %9 предоставляют доступ к сгруппированным частям (снова в кавычках). Шаблона из последнего совпавшего RewriteCond в текущем наборе условий. %0 предоставляет доступ к целой строке, совпавшей с этим Шаблоном
  3. Расширения RewriteMap это расширения в форме ${mapname:key|default}
  4. Серверные переменные это переменные вида %{ NAME_OF_VARIABLE } где NAME_OF_VARIABLE может быть строкой, взятой из следующего списка

Шаблон_условия это шаблон условия, регулярное выражение, которое применяется к текущему экземпляру СтрокаТестирования. СтрокаТестирования сначала оценивается перед сопоставлением с ШаблономУсловия.

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг