Основным функциональным модулем для Apache, который позволяет переписывать URL-запросы в удобные для кода строки, является mod_rewrite. Настройка модуля осуществляется набором правил, который описан либо в конфигурации вашего сервера, либо в файлах .htaccess. Далее о том, как переписать URL-адреса с помощью mod_rewrite для Apache в Ubuntu 20.04.
Основным файлом, на ряду с модулем mod_rewrite, который позволяет осуществлять перезаписи запросов, изменять доступ к страницам и многое другое, в соответствии с заданными правилами, является .htaccess.
Этот файл необходимо размещать в корневом каталоге сайта, чтобы он мог функционировать с заданными для него свойствами.
В этой статье, мы отразим необходимую информацию, в которой рассмотрим основные моменты работы модуля mod_rewrite и .htaccess.
Основные требования:
- Настроенный VPS с Ubuntu Server 20.04
- Установленный веб-сервер
Запуск модуля mod_rewrite.
Как правило, модуль mod_rewrite уже установлен в системе, и для дальнейшего его использования веб-сервером Apache, нам нужно только запустить его. Для включения модуля воспользуемся командой a2enmod:
$ sudo a2enmod rewrite
Если на данном этапе модуль был ранее запущен, система сообщит нам об этом. Чтобы веб-сервер Apache полноценно смог работать с модулем mod_rewrite, необходимо перезапустить его. Делается это следующей командой:
$ sudo systemctl restart apache2
Модуль включен. Далее нам необходимо создать файл .htaccess в корневом каталоге нашего сайта, в котором в последующем мы разместим необходимые нам правила.
Создание файла .htaccess
Как говорилось выше, этот файл позволит нам создавать необходимые правила, связанные с работой на нашем будущем сайте.
Предварительно внесем несколько изменений в конфигурацию нашего сервера. Это необходимо сделать для того, чтобы веб-сервер Apache смог работать с файлом .htaccess. Отредактируем следующий файл, например, в редакторе nano.
$ sudo nano /etc/apache2/site-available/000-defaulte.conf
Дополним блок <VirtualHost *:80>
следующими настройками:
<VirtualHost *:80> <Directory /var/www/html Option Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
Сохраним наши настройки, выйдем из редактора и перезапустим сервер Apache:
$ sudo systemctl restart apache2
Теперь нужно создать файл .htaccess:
$ sudo nano /var/www/html/.htaccess
Первым нашим правилом, которое мы должны добавить в файл .htaccess для активации RewriteEngine
, будем следующая строка:
RewriteEngine on
Здесь необходимо сохранить и выйти из редактирования файла.
Настройка перезаписи URL-адресов
После успешного создания файла .htaccess, будем постепенно наполнять его необходимыми правилами, которые будут преобразовывать ссылки в действующие пути к страницам.
Для настройки доступа к ссылке http://your_web_server_ip/index
необходимо создать страницу index.html
в корневой директории веб-сервера:
$ sudo nano /var/www/html/index.html
Наполнить index.html
файл следующим HTML-кодом:
<html> <head> <title>Your page</title> </head> <body><h1> *** Your page content *** </h1> </body> </html>
Наша страница будет доступна по следующей ссылке: http://your_web_server_ip/index.html
Но если ввести ссылку ниже: http://your_web_server_ip/index
мы получим ошибку 404
.
Как видно из этого примера, в конце ссылки не используется .html
, что и привело к появлению ошибки 404
. Ошибка 404
или Not Found
(«не найдено»)— стандартный код ответа HTTP о том, что клиент был в состоянии общаться с сервером, но сервер не может найти данные согласно запросу. Т.е. запрашиваемая страница отсутствует по данному запросу.
Если мы хотим, чтобы пользователи могли получить доступ к странице, не указывая расширения .html
, мы создадим правила перезаписи.
Все правила перезаписи RewriteRules
имеют следующий формат:
RewriteRule pattern substitution [flags]
Размерем:
- RewriteRule – опция перезаписи.
- pattern – выражение, определяющее необходимую строку в URL.
- substitution – путь к файлу.
- flags – параметры, управляющие поведением правила.
Теперь отредактируем файл .htaccess:
$ sudo nano /var/www/html/.htaccess
Здесь у нас уже имеется одно правило. Наполним следующим правилом и затем сохраним наши изменения:
RewriteEngine on RewriteRule ^index$ index.html [NC]
В нашем случае ^index$
— это шаблон, index.html
– путь к файлу, а [NC]
– флаг. Теперь, более подробно про правило, которое мы использовали, по частям:
^
– запись, обозначающая начало шаблона URL (послеyour_web_server_ip/
).$
— конец шаблона.Index
– сам шаблон, именно то слово, которое необходимо найти в запросе.index.html
– страница сайта.[NC]
– флаг, отключающий чувствительность к регистру.
Откроем ссылку http://your_web_server_ip/index
в нашем браузере и мы увидим наше правило в работе. Это правило позволят осуществлять доступ к нашей странице index.html
по следующим URL-ссылкам:
- http://your_web_server_ip/index; (без .html)
- http://your_web_server_ip/Index; (правило не чувствительно к регистру);
- http://your_web_server_ip/index.html; (ссылка будет работать).
URL-адреса, указанные ниже, работать не будут:
- http://your_web_server_ip/index/ (в нашем правиле (символ $), после index ничего быть не может).
- http://your_web_server_ip/about (так как about не совпадает со строкой index).
В данных примерах мы увидели, каким образом работает правило перезаписи ссылок и для чего необходим файл .htaccess
, и узнали, как переписать URL-адреса при помощи mod_rewrite для Apache в Ubuntu 20.04.