mod_rewrite – мощный инструмент Apache, который обеспечивает возможность работать с URL. Он позволяет переопределять адреса, чтобы облегчить работу в системах управления контентом, например WordPress.
Mod_rewrite популярен для генерации человекопонятных адресов (ЧПУ), что делает URL более дружелюбными.
В этом гайде мы опишем действия, с помощью которых включается mod_rewrite на веб-сервере под управлением Ubuntu 18.04.
Требования:
- Ubuntu 18.04 VPS (или выделенный сервер)
- Стандартный пользователь с возможностью выполнения sudo-команд
- Веб-сервер Apache
Включение mod_rewrite
Для включения любого модуля Apache используется команда a2enmod. Выполним ее на сервере под Ubuntu 18.04:
$ sudo a2enmod rewrite
Если модуль уже подключен, появится сообщение с предупреждением.
Для применения изменений в конфигурации требуется перезапуск Apache. Для этого наберем команду:
$ sudo systemctl restart apache2
Теперь сервер готов к изменению URL.
Включение возможности работы с .htaccess
Вы можете настроить правила подмены URL непосредственно в конфигурационном файле Apache. Но удобнее сохранять правила в файле .htaccess для каждого сайта отдельно. Большинство CMS используют собственный .htaccess, который создается вместе с установкой приложения.
По умолчанию, Apache не позволяет использовать .htaccess. Отредактируем конфигурацию используемого виртуального хоста следующим образом:
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
Итак, отредактируем созданный по умолчанию файл с помощью команды nano:
$ sudo nano /etc/apache2/sites-available/000-default.conf
При этом скопированный текст помещается в конец файла перед закрывающим тегом </VirtualHost>. Не забываем сохранять файл, нажав CTRL + X, затем Y и Enter.
После этого перезапустим Apache для применения изменений:
$ sudo systemctl restart apache2
Синтаксис mod_rewrite
mod_rewrite содержит следующие части:
RewriteRule pattern substitution [flags]
RewriteRule – оператор команды
pattern – это образец (регулярка), который соответствует тому, что пользователь набирает в браузере.
Substitution – фактический адрес, на который должен быть перенаправлен пользователь.
flags – дополнительные параметры, которые определяют работу правила.
Создание файла .htaccess
Теперь создадим тестовый файл .htaccess в корневом каталоге сайта, чтобы проверить mod_rewrite. Для этого наберем команду:
$ sudo nano /var/www/html/.htaccess
Все правила должны идти за командой «RewriteEngine on». Поэтому наберем ее в первой строке нашего файла:
RewriteEngine on
Затем определим правило, которое перенаправит пользователя к странице contact.html, если он набирет адрес http://xxx.xxx.xxx.xxx/contact (где "xxx.xxx.xxx.xxx" — ip-адрес нашего сервера)
Такое правило выглядит следующим образом:
RewriteRule ^contact$ contact.html [NC]
В этом примере contact – паттерн, по которому пользователь должен быть перенаправлен на фактический адрес страницы contact.html. [NC] – параметр, который говорит серверу применять правило без учета регистра. "^" указывает на то, что отрабатываем соответствия любого текста после IP-адреса сервера или доменного имени, а знак "$" указывает на конец URL.
Таким образом, наш файл .htaccess должен принять следующий вид:
RewriteEngine on
RewriteRule ^contact$ contact.html [NC]
Сохраним файл, нажимая CTRL + X, Y, и Enter.
Затем создадим страницу contact.html. Для этого воспользуемся командой:
$ sudo nano /var/www/html/contact.html
Далее отредактируем текст HTML как указано в примере:
<html>
<head>
<title>Contact our website</title>
</head>
<body>
<h1>This is a contact us page</h1>
</body>
</html>
Сохраним файл, нажимая CTRL + X, Y и Enter.
Теперь, если набрать в адресной строке браузере http://xxx.xxx.xxx.xxx/contact, веб-сервер должен отправить нас на страницу contact.html, которую мы только что создали.
Заключение
Юзерфрендли-URL очень важны не только для людей, но и для поисковых систем. Использование правил с ключевыми словами в URL делают сайт более SEO-оптимизированным. Для каждого виртуального сервера можно указать десятки правил для подмены адресов. В этом руководстве были описаны простые действия для того, чтобы включить mod_rewrite на Apache и убедиться, что модуль работает правильно.