
Поддержка сайта
Продвижение сайтов
Создание сайтов
Для чего нужен mod_rewrite?
Модуль Apache mod_rewrite основан на регулярных выражениях и позволяет перезаписывать или, другими словами, перенаправлять URL-запросы в определенный подкаталог, и это перенаправление выполняется на уровне сервера.
Например, при вводе адреса: example.com мы хотим открыть ресурс, который размещен в подкаталоге / folder1 / этого URL-адреса, а именно:
example.com/folder1/resource.html
Этого эффекта можно добиться с помощью mod_rewrite.
Функциональность mod_rewrite определяется в файле .htaccess в корневом каталоге пользователя. Чтобы увидеть служебные файлы, чьи имена начинаются с точки в файловом менеджере, вам нужно нажать кнопку «Настройки», установить флажок «Показать скрытые файлы (точечные файлы)» и нажать кнопку «Сохранить», чтобы сохранить изменения:
Примеры использования mod_rewrite
Сначала мы покажем несколько примеров, а затем объясним, что они означают.
В первом примере мы покажем вам, как перенаправить URL:
http://www.example.com/folder1/ на
http://www.example.com/folder2/
Параметры + FollowSymLinks RewriteEngine On RewriteRule ^ folder1. * $ Http://www.example.com/folder2/ [R = 301, L]
Если мы хотим, чтобы URL-адрес http://www.example.com/folder1/ открывал домашний каталог нашего сайта, а именно http://www.example.com, то наш файл .htaccess должен выглядеть так:
Параметры + FollowSymLinks RewriteEngine On RewriteRule ^ folder1. * $ Http://www.example.com/ [R = 301, L]
В следующем примере URL будет перенаправлен:
http://www.example.com/folder1/file.htm, чтобы открыть с
http://www.example.com/folder2/file.html
Важно отметить, что для успешной работы перенаправления содержимое двух папок должно быть идентичным.
Параметры + FollowSymLinks RewriteEngine On RewriteRule ^ folder1 /(.*)$ http://example.com/folder2/$1 [R = 301, L]
директивы mod_rewrite
- Options + FollowSymLinks — это директива веб-сервера apache, которая необходима для использования модуля mod_rewrite.
- RewriteEngine — директива, разрешающая использование mod_rewrite.
- RewriteRule — с помощью этой директивы мы определяем само правило.
Первая часть выражения после RewriteRule определяет, как выглядит исходный URL. Как упоминалось выше, это определение основано на регулярных выражениях. Краткое руководство к ним приведено в конце статьи.
Вторая часть после RewriteRule определяет новый URL-путь к ресурсу. Эта ссылка относится к основной папке корневого хостинга документов, также могут быть включены подкаталоги.
Символ $ 1, использованный в конце последнего примера, указывает, что подстраницы должны вызываться из нового места, которое мы выбрали. Это делается только в последнем примере, потому что только здесь есть идентичный контент, если нет идентичного контента, как в первых двух примерах, $ 1 не добавляется.
[R = 301, L] — эта строка выполняет перенаправление с кодом состояния 301, а также останавливает любую последующую перезапись с флагом L. Дополнительная информация о доступных флагах, используемых в mod_rewrite, помещается в конце статьи.
В следующем примере показано, как перенаправить URL http://www.example.com/file.html на http://www.example.com/folder1/file.html.
Для успешной работы перенаправления папка folder1 должна существовать и содержать содержимое.
Параметры + FollowSymLinks RewriteEngine On RewriteCond% {HTTP_HOST} example.com $ [NC] RewriteCond% {HTTP_HOST}! Folder1 RewriteRule ^ (. *) $ Http://example.com/folder1/$1 [R = 301, L]
В этом примере есть несколько новых директив:
RewriteCond% {HTTP_HOST} — указывает, какие адреса будут перенаправлены, а какие нет. В нашем случае мы хотим перенаправить example.com.
! показывает то, что мы не хотим перенаправлять.
[NC] — этот флаг означает отсутствие регистра и делает директиву нечувствительной к регистру (нижний / верхний регистр).
Перенаправьте http://example.com на http://www.example.com. Этот пример также будет работать, если мы попытаемся получить доступ к определенному файлу, например http://example.com/file.html:
Параметры + FollowSymLinks RewriteEngine на RewriteCond% {HTTP_HOST} ^ example.com [NC] RewriteRule ^ (. *) $ Http://www.example.com/$1 [R = 301, L]
Регулярные выражения (regex)
Регулярное выражение означает поиск текста по шаблону. В этой части статьи мы опишем основные символы, используемые в регулярных выражениях.
^ | показывает начало выражения, для которого будет выполняться поиск. |
$ | показывает конец выражения, для которого будет выполняться поиск совпадения. |
^ index.html $ | указывает, что контент, который вы ищете, должен быть в точности index.html |
. | показывает каждый непустой символ. |
* | указывает, что предыдущий символ может содержать ноль или более совпадений. |
^ архив. * $ | таким образом, есть соответствие каждому выражению, которое начинается с archive: archive2012, archive_daily. |
^. * $ | показывает перехватить все, это может быть полезно в случае, если мы не знаем, какой URL будет вводить пользователь. |
Флаги в mod_rewrite
Если перезапись URL-адреса должна быть связана с определенными параметрами (флагами), которые управляют поведением mod_rewrite, они отображаются в квадратных скобках после RewriteRule и разделяются запятыми, если их несколько.
Таким образом, также может применяться внешнее перенаправление через код состояния HTTP. В следующей таблице показан набор параметров RewriteRule. Полный список можно найти на официальном сайте Apache.
Перенаправить | р | Флаг [R] используется для перенаправления HTTP, которое выполняется браузером с кодом состояния 302. Чтобы использовать другой код состояния, добавьте его со знаком равенства к флагу, например [R = 301]. |
Запрещено | F | Флаг [F] предписывает веб-серверу отправить в браузер код состояния 403 (Запрещено). |
Ушел (исчез) | г | Веб-сервер отправляет браузеру код состояния 410 (Gone) и указывает, что ранее доступный ресурс больше не доступен. |
Последний | L | Флаг [L] заставляет mod_rewrite прекратить обработку набора правил. |
Nocase (без шрифта) | NC | Флаг [NC] указывает, что шрифт (нижний / верхний регистр) не имеет значения при проверке соответствия URL условиям перезаписи. |
Цепь | C | Следующее правило RewriteRule учитывается, только если выполняется текущее состояние. |