Как выполнить внутреннее перенаправление с помощью mod_rewrite в Apache
В этой и следующей статьях мы объясним, как использовать mod_rewrite для сопоставления определенных HTTP-запросов с другими страницами веб-сайта или внешним URL-адресом.
Другими словами, этот известный модуль Apache позволит вам перенаправить один URL-адрес на другой, что мы проиллюстрируем практическими примерами.
Рекомендуется к прочтению: 5 советов по повышению производительности вашего веб-сервера Apache
ПРИМЕЧАНИЕ. В приведенных ниже примерах предполагается, что вы хотя бы немного знакомы с регулярными выражениями, совместимыми с Perl (PCRE). Поскольку эта тема выходит за рамки данной статьи, за более подробной информацией о PCRE обратитесь к документации Perl 5 версии 24.0.
Прежде чем продолжить, убедитесь, что модуль перезаписи загружен. Хотя это поведение по умолчанию в CentOS и подобных дистрибутивах, в Debian и его производных вам придется загружать его вручную следующим образом:
a2enmod rewrite
Настройка Apache для использования модуля mod_rewrite
Для простоты давайте воспользуемся сайтом по умолчанию в поле CentOS 7 (IP 192.168.0.100), чтобы объяснить, как использовать mod_rewrite ( DocumentRoot: /var/www/html, файл конфигурации: /etc/httpd/conf/httpd.conf).
Чтобы Apache мог использовать этот модуль, добавьте в файл конфигурации следующую строку:
RewriteEngine on
Важно отметить, что эта конфигурация не будет наследоваться виртуальными хостами в одном и том же ящике.
Таким образом, вам нужно будет добавить RewriteEngine для каждого виртуального хоста, на котором вы хотите использовать правила перезаписи.
Внутреннее перенаправление: сопоставление URL-адреса с другим на том же виртуальном хосте.
Внутреннее перенаправление — это простейший пример mod_rewrite. Если вы хотите перенаправить все запросы для default.aspx на index.html, добавьте следующую строку (также известную как правило перезаписи) в разделе RewriteEngine. > на:
RewriteRule "^/default\.aspx$" "/index.html"
и не забудьте перезапустить Apache, чтобы изменения вступили в силу.
Это может пригодиться, если ваш сайт изначально был разработан с использованием ASP, а затем заменен на простой HTML5. Поисковые системы проиндексируют файл .aspx
, но этот файл больше не существует.
В этом случае вам нужно будет найти способ перенаправить запрос, чтобы ваши потенциальные посетители не попадали на страницу с ошибкой. Для проверки давайте создадим простой HTML-файл с именем index.html
внутри /var/www/html со следующим содержимым:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>New site</title>
</head>
<body>
<h2>Default.aspx was here, but now it's index.html</h2>
</body>
</html>
Знаки каретка и доллар заставят регулярное выражение соответствовать любой строке, начинающейся с /default
и заканчивающейся .aspx
соответственно.
Рекомендуется к прочтению: Установите Mod_Pagespeed, чтобы повысить производительность Apache до 10 раз
Теперь запустите браузер и укажите в нем адрес 192.168.0.100/default.aspx. Если все пойдет так, как ожидалось, Apache должен вместо этого использовать index.html
.
Однако конечный пользователь по-прежнему увидит default.aspx
в адресной строке, поэтому изменение будет полностью прозрачным:
Если вы хотите, чтобы URL-адрес в адресной строке показывал, что сервер на самом деле обслуживает index.html
, а не страницу с именем default.aspx
, добавьте [R, L]
в конец правила перезаписи следующим образом:
RewriteRule "^/default\.aspx$" "/index.html" [R,L]
Здесь [R,L]
— два дополнительных флага, которые указывают, что в браузер (R)
должно быть выполнено полное HTTP-перенаправление и что никакие дальнейшие правила обрабатываться не должны:
Обратите внимание, что в адресной строке теперь отображается index.html
, как и ожидалось, вместо default.aspx
, как это было раньше.
Краткое содержание
В этой статье мы объяснили, как использовать mod_rewrite для выполнения внутреннего перенаправления. Следите за обновлениями до следующего поста, где мы узнаем, как перенаправить на ресурс, который был перемещен на другой сервер, и как отображать пользовательский контент на основе браузера пользователя. А пока обратитесь к документации Apache 2.4 за полным списком доступных флагов перезаписи.
Как всегда, не стесняйтесь использовать форму комментариев ниже, если у вас есть какие-либо вопросы или отзывы об этой статье. Мы с нетерпением ждем вашего ответа!