Rewrite URLs (mod_rewrite) Apache - Ubuntu 20.04

Теги

С помощью mod_rewrite вы можете переписывать неограниченное количество правил. Это позволит вам переписывать URL на основе переменных окружения, HTTP-заголовков и переменных сервера.

mod_rewrite - это модуль Apache, который использует механизм перезаписи на основе правил. Он используется для перевода и перенаправления запрошенного URL на новый URL. Позволяет изменять URL динамически. Таким образом, посетитель никогда не увидит изменения URL в адресной строке. С помощью mod_rewrite вы можете переписывать неограниченное количество правил. Это позволит вам переписывать URL на основе переменных окружения, HTTP-заголовков и переменных сервера.

В этой заметке мы покажем, как использовать mod_rewrite для перезаписи URL для Apache на Ubuntu 20.04. 

Вход на сервер и обновление пакетов серверной ОС.

Сначала войдите на сервер Ubuntu 20.04 по SSH под пользователем root:

ssh root@IP_Address -p Port_number

Вы должны заменить 'IP_Address' и 'Port_number' на соответствующие IP-адрес вашего сервера и номер порта SSH. Также, при необходимости, вы должны заменить 'root' на имя пользователя учетной записи администратора.

Прежде чем начать установку, необходимо убедиться, что все пакеты ОС Ubuntu, установленные на сервере, обновлены. Это можно сделать, выполнив следующие команды:

apt-get update -y
apt-get upgrade -y

Установите веб-сервер Apache.

Перед началом работы убедитесь, что пакет веб-сервера Apache установлен в вашей системе. Если он не установлен, вы можете установить его с помощью следующей команды:

apt-get install apache2 -y

После установки пакета запустите службу Apache с помощью следующей команды:

systemctl start apache2

Затем откройте веб-браузер и введите URL http://your-server-ip для проверки веб-сервера Apache. Если все в порядке, вы должны увидеть тестовую страницу Apache.

Включаем mod_rewrite.

По умолчанию модуль mod_rewrite устанавливается вместе с пакетом Apache, но он отключен. Поэтому сначала его нужно включить. Вы можете включить его с помощью следующей команды:

a2enmod rewrite

Затем перезапустите службу Apache, чтобы применить изменения. Затем проверьте модуль Apache mod_rewrite с помощью следующей команды:

apache2ctl -M | grep rewrite_module

Вы должны получить следующий результат:

rewrite_module (shared)

Включить файлы .htaccess.

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

Для этого отредактируйте файл конфигурации виртуального хоста Apache по умолчанию:

nano /etc/apache2/sites-available/000-default.conf

Добавьте следующие строки:

<Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
</Directory>

Обязательно сохраните и закройте файл, а затем перезапустите службу Apache, чтобы применить изменения:

systemctl restart apache2

Настройка перезаписи URL-адресов.

Чтобы понять, как работает перезапись URL, мы создадим страницу home.html в корневом каталоге документа Apache. Затем мы настроим базовую перезапись URL, которая позволит получить доступ к странице http://your-server-ip/home и преобразовать ее в реальный путь к странице http://your-server-ip/home.html.

Сначала создадим страницу home.html:

nano /var/www/html/home.html

Добавьте следующее содержимое:

<html>
    <head>
        <title>Home</title>
    </head>
    <body>
        <h1>Home Page</h1>

<h2>This is my home page</h2>
    </body>
</html>

Сохраните и закройте файл, когда закончите.

Далее создайте файл .htaccess в корневом каталоге стандартного документа сайта для тестирования mod_rewrite.

nano /var/www/html/.htaccess

Во-первых, добавьте следующую строку, чтобы включить механизм перезаписи:

RewriteEngine on

Затем добавьте следующее правило перезаписи, которое перенаправляет посетителей на сайт home.html, если они запрашивают страницу http://your-server-ip/home.

RewriteRule ^home$ home.html [NC]

Сохраните и закройте файл, когда закончите.

Краткое объяснение синтаксиса правил перезаписи приведено ниже:

  • ^ - Это будет соответствовать любому тексту после IP-адреса сервера.
  • $ - Это указывает на конец URL.
  • home - Это будет соответствовать фактической строке home.
  • home.html - Это определяет файл, к которому обращается посетитель.
  • [NC] - Это сделает правило нечувствительным к регистру.

Теперь вы можете посетить домашнюю страницу по адресу http://your-server-ip/home в вашем веб-браузере. Apache перенаправит вас на страницу home.html.


Некоторые ошибки, которые Вы способны допустить, в mod_rewrite, могут привести к логической петле.