Что такое механизм перезаписи?

Механизм перезаписи — это компонент программного обеспечения веб-сервера, который позволяет переписывать или перенаправлять единые локаторы ресурсов (URL). Самым популярным механизмом перезаписи является mod_rewrite HTTP-сервера Apache. Существуют и другие веб-серверы, такие как nginx или lighttpd, которые обеспечивают аналогичные функции.

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

«http://example.com/a/index.php?title=pagetitle»

нелегко запомнить; механизм перезаписи позволяет написать URL гораздо более интуитивно понятным способом:

«http://example.com/article/pagetitle».

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

«http://example.com/a/index.php?title=pagetitle»

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

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

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

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

Примеры использования

Механизм перезаписи предоставляет различные команды для манипулирования URL-адресами, которые могут быть определены как правила в различных частях программного обеспечения веб-сервера. Mod_rewrite, механизм перезаписи веб-сервера Apache, может использоваться в контейнере каталога в файле httpd.conf, в разделе виртуального хоста или в файле .htaccess. В nginx перезапись URL записывается в конфигурационном файле /etc/nginx/nginx.conf. У lighttpd файл /etc/lighttpd.conf доступен в конфигурации vHost.

Чтобы переписать динамический URL «http://example.com/a/index.php?title=pagetitle» через механизм перезаписи в статический URL «http://example.com/article/pagetitle», на веб-серверах Apache, nginx и lighttpd используются разные команды.

Механизм перезаписи Apache

Чтобы использовать mod_rewrite в Apache, необходимо активировать механизм перезаписи с помощью директивы RewriteEngine ondirective. За ней следует RewriteRule, которое определяет инструкции для перезаписи URL с помощью регулярных выражений (Regex):

RewriteEngine on
RewriteRule ^/article/(.*)$ /a/index.php?title=$1

Если переписывание должно быть определено правилом RewriteRule, то его можно разделить на два параметра: шаблон поиска и целевой шаблон.

  • Шаблон поиска: этот шаблон описывает URL-адреса, которые должны быть перенаправлены. В форме шаблона поиска задается определенное условие. Если это условие выполнено, URL-адрес может быть переписан в соответствии с целевым шаблоном. В данном примере шаблоном поиска будет следующий раздел правила RewriteRule: ^/article/(.*)$.
  • Целевой шаблон: этот параметр описывает целевой URL. Если перенаправление настроено на уровне сервера, заменяется полный URL. На уровне каталога в файле .htaccess или в httpd.conf заменяется только путь от текущего каталога и далее. В данном примере целевой шаблон включает этот раздел правила RewriteRule: /a/index.php?title=$1.

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

Регулярное выражение Объяснение
^ Начало строки.
$ Конец строки.
(.*) Предназначен для обозначения любой строки в URL. Круглые скобки сохраняют строку в переменной.
$1 Переменная, позволяющая получить доступ к кэшированным значениям, которые хранятся в круглых скобках.

RewriteRule ^/article/(.*)$ /a/index.php?title=$1 определяет правило, согласно которому все URL, начинающиеся со строки /article/, должны быть преобразованы в динамическую схему URL /a/index.php?title=$1, где $1 — строка, соответствующая всему, что идет после /article/, захваченная держателем (.*).

Если пользователь вводит в веб-браузере статический URL «http://example.com/article/pagetitle», веб-сервер преобразует его в динамический URL «http://example.com/a/index.php?title=pagetitle» на основе mod_rewrite. Это незаметно для пользователя. В этом случае держатель места (.*) и переменная $1 соответствуют строке ‘pagetitle’.

Если переписывание URL должно быть связано с определенными опциями, которые управляют поведением mod_rewrite, они перечисляются в квадратных скобках после RewriteRule и разделяются запятыми, если их несколько. Таким образом можно реализовать внешнее перенаправление по коду статуса HTTP. В следующей таблице приведена подборка опций для RewriteRule. Полный список можно найти на официальном сайте Apache Software Foundation.

Опция Флаг Функция
Перенаправление R Флаг [R] вызывает HTTP-переадресацию браузеру с кодом состояния 302. Чтобы использовать другой код статуса, добавьте его со знаком равенства к флагу, например, [R=301].
Запрещенный F Указывает веб-серверу отправить браузеру код состояния HTTP 403 (запрещено).
Ушел G Веб-сервер посылает браузеру код состояния HTTP 410 (gone) и показывает, что ресурс, который раньше был доступен, больше не доступен.
Последний L Этот флаг заставляет mod_rewrite прекратить обработку набора правил.
Nocase NC При проверке соответствия URL условиям перезаписи верхний и нижний регистр не имеют значения.
Цепочка C Следующее правило RewriteRule рассматривается только в том случае, если выполняется текущее условие.

На основе такого варианта внешняя пересылка через код состояния HTTP может быть реализована следующим образом:

RewriteEngine On
RewriteRule ^oldpage.html$ /newpage.html [R=301]

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

Синтаксис RewriteCond соответствует следующей структуре и указывается перед RewriteRule:

RewriteCond TESTSTRING CONDITION

Тестовая строка обычно содержит серверные переменные, которые определяются знаками процента и фигурными скобками, например %{HTTP_HOST}. В следующей таблице приведена подборка серверных переменных.

Серверная переменная Объяснение
HTTP_USER_AGENT Относится к клиенту, используемому для доступа к серверу. Переменная обычно используется для предоставления оптимизированного веб-сайта различным веб-браузерам.
HTTP_HOST Указывает на имя хоста. Оно может включать такие значения, как domain.com, subdomain.domain.com или IP-адрес.
SERVER_PORT Относится к адресуемому порту (например, 80 для HTTP или 443 для HTTPS). Переменная позволяет операторам сайта перенаправлять посетителей на защищенное соединение.
REMOTE_ADDR Обозначает IP-адрес пользователя, обращающегося к веб-серверу. Эта переменная иногда используется для блокирования атак спама.

В следующем примере показан RewriteCond, который связывает последующее правило RewriteRule с IP-адресом пользователя:

RewriteCond %{REMOTE_ADDR} 173.45.68.79 

Переписывание URL с помощью nginx

Веб-сервер nginx также поддерживает перезапись URL. Это может быть реализовано с помощью регулярных выражений. Для преобразования URL-адресов команда перезаписи просто вставляется в конфигурационный файл веб-сервера /etc/nginx/nginx.conf в соответствии с синтаксисом nginx в блоке { […] }:

location /article {
 rewrite ^/article/(.*)$ /index.php?title=$1 last;
}

Часть location /article сообщает операторам сайта, что переписывание URL ссылается на подкаталог article. Регулярные выражения для перезаписи соответствуют тем, которые также используются в веб-сервере Apache и запускаются командой rewrite. Последний флаг указывает на то, что переписывание должно быть выполнено внутри сервера и, следовательно, без перенаправления. Следующие флаги доступны для временного или постоянного перенаправления:

Флаг Объяснение
последний URL-адреса переписываются внутри. Перенаправление отсутствует.
перенаправить Пользователь временно перенаправляется на новый URL с помощью редиректа 302.
постоянный Пользователь постоянно перенаправляется на новый URL с помощью 301 редиректа.

Если флаг не установлен, то nginx автоматически присваивает HTTP-код ошибки 500.

Перезапись с помощью lighttpd

В lighttpd перезапись URL реализована на основе функции url.rewrite-TYPE. Местоимение TYPE обозначает различные параметры конфигурации перезаписи:

Параметры конфигурации переписывания Объяснение
url.rewrite-once Однократная перезапись URL. Если поисковый шаблон найден и соответствующий URL переписан в целевой шаблон, больше переписывать не нужно.
url.rewrite-repeat В отличие от url.rewrite-once, за url.rewrite-repeat может следовать дальнейшее переписывание.

Синтаксис в основном повторяет синтаксис Apache при перезаписи с помощью lighttpd, так как используются те же регулярные выражения:

url.rewrite-once = (
 "^/article/(.*)$" => "/index.php?title=$1"
)

Если в lighttpd вместо внутреннего перенаправления должно происходить внешнее, то модуль переписывания не используется, а используется модуль перенаправления, где URL проходят через модуль переписывания, а затем модуль перенаправления.

Перезапись с помощью Microsoft IIS

Платформа Microsoft Internet Information Services (IIS) не имеет встроенного механизма перезаписи. Однако впоследствии его можно добавить к веб-серверу с помощью модуля IIS URL Rewrite 2.0. Это также позволяет пользователям Microsoft сделать URL-адреса доступными для посетителей своих сайтов, не вмешиваясь во внутреннее управление файлами. После загрузки расширение для перезаписи URL интегрируется непосредственно в интерфейс IIS Manager, где RewritingRules вводятся с помощью графического интерфейса пользователя. IIS URL Rewrite 2.0 использует регулярные выражения для определения шаблонов поиска и целей URL.

Переписывание URL и оптимизация поисковых систем

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

Оцените статью
cdelat.ru
Добавить комментарий