Mod_rewrite (.htaccess) для выбора канонической формы доменного имени
Переназначение адреса. Модуль mod_rewrite. Перезапись URL по шаблону. Упорядочение файлов. Регистрация. Наследование. Назначение основного каталога.
Переназначение адреса
Выбрав “ Расширенные настройки→ NAT→ Переназначение IP-адреса”, вы можете
настроить правила переназначения IP-адресов в следующем окне. IP-адреса
переназначаются для тех виртуальных каналов, которые настроены с несколькими IP.
Правило переназначения IP-адресов настраивается для каждого виртуального канала
(только для виртуальных каналов с несколькими IP).
Рисунок 1
Для того, чтобы добавить правило переназначения:
Шаг1:Выбрать “Виртуальный канал” и “Несколько” в строке “Количество IP-адресов”. Затем
выберите окно Переназначение IP-адресов для Виртуального сервера (как показано
на рис. 2).
Переназначение IP-адресов может производиться только для виртуальных каналов с несколькими IP.
Шаг2:Выбрать Индекс правила для правила как показано на рис. 1.
Шаг3:Выбрать необходимый вам тип правила из раскрывающегося списка.
Шаг4:Указать локальный и публичный IP-адреса в соответствующих полях.
Шаг5:Затем нажмите Сохранитьдля того, чтобы произведенные изменения вступили в
силу.
Также имеются следующие варианты настройки (см. рис. 1):
Введите индекс назначенной записи, нажмите кнопку Удалить для удаления записи.
Нажмите кнопку Назад для возврата в предыдущее окно.
Нажмите кнопку Отменить для отмены только что произведенных настроек.
Рисунок 2
Модуль mod_rewrite
mod_rewrite – модуль веб-сервера Apache, предназначенный для преобразования URL. Работает «на лету», преобразуя запрошенный URL по заданным правилам с использованием регулярных выражений. При этом правила преобразований могут быть заданы как для веб-сервера в целом (в файле конфигурации httpd.conf или включаемых файлах), так и в контексте отдельной директории (в файле локальной конфигурации .htaccess). Кроме шаблонов правил, задаются также и условия их выполнения, в результате получается очень гибкий и мощный механизм преобразования. В условиях используются переменные окружения Apache, что позволяет управлять подменой не только URI, но и имени хоста, реагировать на браузер (или поискового бота), переадресовывать запрос в другой домен, обрабатывать ошибочные запросы и многое другое.
Применение mod_rewrite
Применение модуля в практике сайтостроительства вполне соответствует широко известному «принципу 20×80»: 20% функций используются в 80% случаев, на остальные 80% функций приходится 20% использования. Это не значит, что в модуле много ненужного, это говорит о его широких возможностях. В основном модуль применяют для переадресации запросов и обработки псевдостатических ссылок, реже – для фильтрации и отсечения некорректных запросов.
Псевдостатические ссылки
Использование правил mod_rewrite для обработки псевдостатических ссылок стало фактическим стандартом в разработке «движков» сайта. Замена ссылки на скрипт с параметрами запроса ссылкой на статический файл (или директорию) требует обратной замены в момент обращения по этой ссылке. Модуль по заданным правилам разбирает URI и «реконструирует» подлинную ссылку на файл скрипта и параметры вызова. В результате скрипт (или набор скриптов) вызываются веб-сервером на обработку в естественном для скриптов формате, но в браузере посетителя никаких переадресаций и смены ссылки не происходит.
Например, скрипт галереи принимает в качестве параметров идентификатор раздела (строку символов латинского алфавита) — id и номер страницы в разделе — page. А в ссылках, которые он дает для навигации, значения параметров даны через дефис и добавлено расширение html. Ссылка на вторую страницу выставки чайников выглядит как /teapot-p2.html, а для получения этой страницы нужно вызвать скрипт index.php с параметрами id=teapot&page=2.
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([a-z]+)\-p([0-9]+)\.html$ index.php?id=$1&page=$2 [L]
Очень часто используется другой вариант разбора псевдостатики, когда ссылки разбирает «главный» скрипт движка. Но и в этом случае все равно требуется хотя бы одно правило для mod_rewrite, чтобы передать любой запрос в обработку именно этому скрипту.
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]
По этому правилу любой запрос к несуществующему файлу передается скрипту index.php — а этот скрипт должен разобрать и обработать запрошенный URI.
Переадресация запросов
Переадресация запросов (перенаправление) может быть реализована как внутри одного домена, так и между разными доменами. При этом код статуса HTTP можно задавать любой, в зависимости от целей перенаправления.
Как сделать переадресацию домена (.htaccess при смене домена, склейка)
Для «склейки» доменов, например, может быть использован такой набор правил:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^new-domain\.com [NC]
RewriteRule (.*) http://new-domain.com/$1 [R=301,L]
для HTTPS (SSL) будет так:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^new-domain\.com [NC]
RewriteRule (.*) https://new-domain.com/$1 [R=301,L]
Этот вариант наиболее универсальный и в большинстве случаев лучше отдать ему предпочтение. Условие преобразования в этом случае означает «если имя запрошенного домена не начинается с new-domain.com». Тем самым набор правил привязан только к тому домену, в который будут перенаправляться все запросы. Сколько и каких доменов являются алиасами — совершенно неважно, все обращения к ним будут перенаправлены в один домен. Правило преобразования целиком подставляет «внутренний» URI, направляя клиента на тот же адрес внутри домена.
Другой вариант:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} old-domain.com
RewriteRule (.*) http://new-domain.com/$1 [R=301,L]
В этом примере проводится перенаправление запроса к old-domain.com в домен new-domain.com с сохранением внутреннего URI, то есть, фактически обрабатывается запрос к любой странице сайта с перенаправлением по тому же внутреннему адресу в другом домене. Это правила для случая «переезда» сайта в другой домен с сохранением всей структуры внутренних ссылок.
Строка RewriteCond задает условие преобразования: если обратились к хосту, имя которого содержит old-domain.com. Обратите внимание, здесь нет меток ^ («начинается с») и $ («оканчивается на»), поэтому условие истинно и для old-domain.com, и для www.old-domain.com.
Поскольку базой преобразования (RewriteBase) назначена корневая директория сайта, правило RewriteRule принимает как входной шаблон всю относительную ссылку (от корня сайта, исключая символ корня /). В этом качестве оно берет любую цепочку любых символов, которую содержит URI, и подставляет ее в выходной шаблон на место сочетания символов $1. После чего проводится переадресация запроса на сформированный адрес: Apache выдает посетителю в заголовке HTTP статус 301 («Moved Permanently»), и в поле Location: заголовка помещает сформированный адрес.
Таким образом, запрос http://www.old-domain.ru/anydir/anyfile.php?id=314 будет перенаправлен на адрес http://new-domain.ru/anydir/anyfile.php?id=314
mod_rewrite (.htaccess) для выбора канонической формы доменного имени
Другой распространенный случай — использование переадресации для выбора канонической (основной) формы доменного имени (с www или без www). Например, для выбора домена www.domain.com нам нужен такой набор правил:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]
В этом случае условие преобразования буквально означает «если имя хоста не начинается с www». При выполнении этого условия (например, запрошен http://domain.com/anyfile.html) сработает правило, которое подставит внутренний URI в шаблон и перенаправит по тому же адресу в домене с www — http://www.domain.com/anyfile.html.
Если вы хотите избавиться о www в адресе сайта, то можно применить в .htaccess такой код:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^domain\.com [NC]
RewriteRule (.*) http://domain.com/$1 [R=301,L]
Где domain.com - домен вашего сайта. Данное условие получает переменную HTTP_HOST (имя домена), сравнивает с требуемым (!^domain\.com [NC]), если условие выполняется и HTTP_HOST не равно domain.com, то переадресовываем на наш домен domain.com.
Дата добавления: 2017-06-02; просмотров: 1937;