Your page

Как переписать URL-адреса с помощью mod_rewrite для Apache в Ubuntu 20.04

Основным функциональным модулем для Apache, который позволяет переписывать URL-запросы в удобные для кода строки, является mod_rewrite. Настройка модуля осуществляется набором правил, который описан либо в конфигурации вашего сервера, либо в файлах .htaccess. Далее о том, как переписать URL-адреса с помощью mod_rewrite для Apache в Ubuntu 20.04.

Основным файлом, на ряду с модулем mod_rewrite, который позволяет осуществлять перезаписи запросов, изменять доступ к страницам и многое другое, в соответствии с заданными правилами, является .htaccess.

Этот файл необходимо размещать в корневом каталоге сайта, чтобы он мог функционировать с заданными для него свойствами.

В этой статье, мы отразим необходимую информацию, в которой рассмотрим основные моменты работы модуля mod_rewrite и .htaccess.

Запуск модуля mod_rewrite.

Как правило, модуль mod_rewrite уже установлен в системе, и для дальнейшего его использования веб-сервером Apache, нам нужно только запустить его. Для включения модуля воспользуемся командой a2enmod:

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

$ sudo systemctl restart apache2

Модуль включен. Далее нам необходимо создать файл .htaccess в корневом каталоге нашего сайта, в котором в последующем мы разместим необходимые нам правила.

Создание файла .htaccess

Как говорилось выше, этот файл позволит нам создавать необходимые правила, связанные с работой на нашем будущем сайте.

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

$ sudo nano /etc/apache2/site-available/000-defaulte.conf

Дополним блок следующими настройками:

Сохраним наши настройки, выйдем из редактора и перезапустим сервер Apache:

$ sudo systemctl restart apache2

Теперь нужно создать файл .htaccess:

$ sudo nano /var/www/html/.htaccess

Первым нашим правилом, которое мы должны добавить в файл .htaccess для активации RewriteEngine , будем следующая строка:

Читайте также:  Linux with nvidia driver

Здесь необходимо сохранить и выйти из редактирования файла.

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

После успешного создания файла .htaccess, будем постепенно наполнять его необходимыми правилами, которые будут преобразовывать ссылки в действующие пути к страницам.

Для настройки доступа к ссылке http://your_web_server_ip/index необходимо создать страницу index.html в корневой директории веб-сервера:

$ sudo nano /var/www/html/index.html

Наполнить index.html файл следующим HTML-кодом:

     

*** Your page content ***

Наша страница будет доступна по следующей ссылке: http://your_web_server_ip/index.html

Web-страница - как переписать URL-адреса с помощью mod_rewrite для Apache в Ubuntu 20.04

Но если ввести ссылку ниже: 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; (ссылка будет работать).
Читайте также:  Pptp vpn клиент linux

URL-адреса, указанные ниже, работать не будут:

  • http://your_web_server_ip/index/ (в нашем правиле (символ $), после index ничего быть не может).
  • http://your_web_server_ip/about (так как about не совпадает со строкой index).

В данных примерах мы увидели, каким образом работает правило перезаписи ссылок и для чего необходим файл .htaccess , и узнали, как переписать URL-адреса при помощи mod_rewrite для Apache в Ubuntu 20.04.

Источник

Как включить 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 systemctl restart apache

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

Читайте также:  Check if program is installed linux

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

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

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

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

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

sudo vi /etc/apache2/sites-available/001-texts.conf

LogLevel warn rewrite:trace4

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

Выводы

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

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Оцените статью
Adblock
detector