Главная >> Инструкции >> Как включить Apache mod rewrite

Как включить Apache mod rewrite

По умолчанию, когда вы в браузере вводите определённый URL и нажимаете Enter, веб-сервер, получивший этот запрос пытается найти файл на сервере по пути, указанному в URL. Если там ничего не указано, то открывается индексный файл, например index.html или index.php. Если же ничего не найдено - возвращается ошибка 404.

Если бы всё работало всегда именно так, то не было бы красивых и удобных для восприятия URL, которые используются на многих сайтах и в том числе и на этом. Для решения этой проблемы применяется модуль apache mod rewite. В этой статье мы рассмотрим как его включить и как он работает.

Как включить Apache mod rewrite

Если бы всё работало как описано выше, то при открытии ссылки https://losst.pro/kak-vklyuchit-apache-mod-rewrite в корневой директории сайта должен был бы существовать файл или скрипт с именем kak-vklyuchit-apache-mod-rewrite. Но это не так. При запросе этой URL веб-сервер действительно пытается найти такой файл, но когда он его не находит, вместо возвращения ошибки 404 передается управление модулю mod_rewrite, который для всех таких URL выполняет скрипт index.php передавая уже ему строку запроса после домена - /kak-vklyuchit-apache-mod-rewrite. А дальше уже PHP на основе этих данных находит и возвращает нужную страницу.

Для включения mod rewrite достаточно выполнить такую команду:

sudo a2enmod rewrite

А затем надо перезапустить веб-сервер:

sudo systemctl restart apache

Но то, что модуль включён на уровне веб-сервера Apache ещё не означает, что он будет работать для веб-сайта. Для этого его надо настроить в файле .htaccess, указать на какому скрипту передавать запросы к несуществующим страницам. Для того чтобы файл .htaccess работал, в секцию Directory виртуального хоста надо добавить директиву AllowOwerride: All. Например:

Далее, например, в WordPress надо добавить такие строки в файл .htaccess:

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>

Весь код заключён в директиву IfModule она позволяет выполнять код внутри неё только когда модуль mod_rewrite включён, иначе эти строки просто игнорируются. Директива RewriteEngine On включает работу этого модуля для текущего каталога. Далее, с помощью RewriteBase / указывается, что необходимо передавать скрипту всю строку после домена. Дальше идут правила RwriteRule с условиями для них RewriteCond, которые выполняются последовательно, сверху вниз.

Первое правило RewriteRule ^index.php$ - [L] дословно сообщает, что если в URL содержится строка index.php, то надо переписать URL на /. Это простое регулярное выражение в котором указано начало и конец строки, а точка экранирована обратным слешем. Флаг [L] означает только то, что если URL совпала с этим правилом, то следующие правила проверять не стоит. После выполнения этого правила URL перепишется и веб-сервер будет считать, что получил запрос /, анализ правил начнётся сначала и на этот раз совпадёт с последним правилом.

Условия RewriteCond действуют на те правила, что идут сразу за ними. В данном случае - RewriteCond %{REQUEST_FILENAME} !-f и RewriteCond %{REQUEST_FILENAME} !-d позволяют последнему правилу выполнится только если URL - это не файл и не папка. А последнее правило, как вы уже поняли перенаправляет всё на скрипт ./index.php.

Если у вас что-то не получается в настройке mod_rewrite имеет смысл посмотреть что происходит внутри веб-сервера во время ваших редиректов. Для этого в конфигурацию виртуального хоста сайта, надо добавить такую строчку. Нарпимер:

sudo vi /etc/apache2/sites-available/001-texts.conf LogLevel warn rewrite:trace4

Далее в лог файле, указанному в директиве ErrorLog вы увидите все попытки веб-сервера преобразовать URL по вашим правилам и сможете понять что вы делаете не так.

Выводы

В этой небольшой статье мы рассмотрели как включить mod rewrite Apache, а также как всё это работает и как искать ошибки. А что вы ещё хотели бы добавить в эту статью? Напишите в комментариях!

Оставьте свой Email для того чтобы получать анонсы новых статей и полезную информацию о Linux по электронной почте
Pеклама
Посмотреть детали

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

4 комментария к “Как включить Apache mod rewrite”

Оставьте комментарий