Найти в Дзене
RUSH ANALYTICS

Что такое Rewriterule

Оглавление

Очень часто владельцам сайтов требуется перенаправлять посетителей с разных адресов на определенную страницу. Это может быть связано с различными причинами, но чаще всего просто остается неиспользованный домен, который нужно пристроить. Так, например, ведется реклама какого-либо товара и вам нужно по клику на определенную ссылку перенаправить его на новый адрес или вовсе передать контент с главного сайта. Можно попросить администратора хостинга, чтобы тот сделал базу данных общей для обоих сайтов, но как быть с выделенным сервером? Здесь придется действовать самостоятельно, используя mod_rewrite сервера Apache. Он входит в состав правил RewriteRule, обеспечивающих вебмастеров большими возможностями.

-2

Возникает рациональный вопрос: а что это такое, собственно говоря? Это специальный модуль сервера Apache, который позволяет выполнять какие-либо действия с URI. Но главной его задачей является перенаправление одного адреса на страницу с другим с целью привлечения большего количества посетителей на конкретную страницу. Модуль обеспечивает веб-мастеров большими функциональными возможностями. Программа обеспечивает оперативную обработку данных, гарантируя максимальное быстродействие.

Особенности модуля

Модуль mod_rewrite представляет собой программу, которая выполняется на сервере. Она содержит в своем составе синтаксический анализатор URI. Его особенность состоит в том, что он позволяет применять регулярные выражения, а также в его возможности входит использование разных источников данных при выполнении анализа ссылки. По факту программа может использовать несколько серверов или окружений, извлекая нужную информацию по определенным признакам. Например, HTTP-заголовки или даже запросы из других баз, используя при этом разные форматы.

-3

С помощью правил RewriteRule пользователь получает возможность выполнять разные действия с URI:

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

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

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

Если перенаправление URI было только внутренним, то посетитель сайта не заметит, что был перенаправлен на другую страницу. Более того, не изменится и ссылка в адресной строке. Она будет выглядеть статической. Сервер апачи работает очень быстро при обязательном соблюдении всех правил его использования RewriteRule. Фактически клиент указывал один адрес, а получил ответ от другого. Данный метод актуален для тех сайтов, в которых перенаправления реализованы в рамках одной базы данных со ссылкой в PHP на главную страницу index.php.

Существует еще один способ выполнения перенаправления посетителя. Это можно выполнить при помощи изменения ссылки непосредственно в браузере пользователя. В таком случае осуществляется отправка кода заголовка и называется эта функция redirect. Существует единая система кодов, каждый из которых определяет конкретные функции модуля. Например, код 301 Moved Permanently является ничем иным, как постоянной перенаправления.

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

-4

Важные моменты

Любые правила строятся на определенных постулатах. Так происходит и с модулем mod_rewrite, так как многие вебмастера считают его запутанным. На самом деле все достаточно просто, если часто применять знания на практике. Чтобы легче и быстрее освоить все функции программы, необходимо запомнить несколько важных моментов:

  1. Модуль умеет работать только с полными ссылками (обязательно должен быть включен path-info). Полный адрес должен присутствовать везде. По сути. все выглядит так: если файл .htaccess расположен в корне и применяются директивы именно из него, то ссылка должна содержать путь к корневой папке на сервере.
  2. Директива RewriteRule указывает на то, что правило преобразования адресов также является и условием, которое необходимо соблюдать в обязательном порядке. Синтаксис указанной директивы прямо указывает на то, каким условиям должен соответствовать URI. Важно понимать, что под правилами имеется в виду выражение, которое будет выполняться при обработке адреса. Вернее было бы назвать его алгоритмом, по которому будет осуществляться преобразование. Стоит понимать, что даже при запуске алгоритма или правила, не всегда будет достигнут нужный результат. Это связано с тем, что промежуточные данные далеко не всегда соответствуют условиям. А чтобы алгоритм был запущен, необходимо полное соответствие ссылки.
  3. Директивой RewriteRule также предусмотрены дополнительные условия. Они вызываются другой директивой — RewriteCond. Количество условий не ограниченно, поэтому их может быть несколько. На этом моменте обычно у всех наступает ступор, потому что происходит разрыв шаблона. Они задействуются в ходе выполнения правила или алгоритма, когда будет запущен основной алгоритм. Конечное преобразование будет выполнено по отношению к URI, если будут выполнены и дополнительные условия. Также важно знать еще один нюанс: прописывать условия к директиве RewriteCond следует перед основными правилами. Многим новичкам такая запись покажется нелогичной, и это немудрено, но она была создана именно в таком порядке.
  4. Текущее представление URI. Речь идет о ссылке, которая уже была преобразована определенными правилами, то есть, до изменения или уже после. Преобразование ссылки осуществляется последовательно от правила к правилу при соблюдении их условий, поэтому адрес будет последовательно изменяться.
  5. Расположение правил RewriteRule должно быть верным и имеет большое значение. Здесь следует понимать, что правила (алгоритмы) располагаются именно в последовательности осуществляемых преобразований ссылки. В противном случае преобразование будет выполнено неверно в любом случае и конечный URI не будет соответствовать заданному. Преобразование происходит в зависимости от последовательности правил, строчка за строчкой. Если адрес не отвечает текущим условиям правила, то оно не выполняется, а происходит переход к следующему и так далее. Соответственно, можно задать несколько конечных ссылок для отправки посетителя на разные сайты при выполнении определенных условий, указанных в цепочке.
  6. Логика отработки алгоритмов в директиве RewriteRule четко выстроена. Сначала осуществляется поиск условий, которые будут выполняться после отработки основного правила. Если дополнительных условий нет, то запускается последовательная обработка основных правил. Если они есть, после отработки основных правил apache направляет на дополнительные при выполнении их условий. При этом они выполняются именно в том порядке, в котором были перечислены в директиве RewriteCond. Здесь имеется важный момент. Преобразование URI будет выполнено только в том случае, если он будет соответствовать всем дополнительным условиям, потому что они объединены оператором AND по умолчанию. Если необходимо, то программист может изменить алгоритм, допустим, сделав так, чтобы выполнялось одно из условий. Для этого достаточно изменить оператор на OR.
  7. Mod Apache позволяет изменять алгоритм действия над URI после выполнения правила, указанного в директиве RewriteRule. Пользователь получает возможность при помощи расстановки соответствующих флагов отказать в выдаче нужных данных или перенаправить на другой адрес.
  8. Mod_rewrite является неотъемлемой частью Apache, поэтому его можно использовать при любых конфигурациях системы. У пользователя есть возможность записать конфигурацию на глобальном уровне или через директиву в главном конфигураторе. Также допускаются записи в подключаемых конфигурациях на виртуальном хосте путем добавления директив. Кроме этого, возможна и запись конфигурации в каталоге через директивы.
-5

Исходя из сказанного, можно построить схему работы алгоритма преобразования URI от начала до получения результата. Она изображена на рисунке.

Читать статью полностью: https://www.rush-analytics.ru/blog/chto-takoe-rewriterule