Apples

Настройка mod_rewrite

Вспомните последнее посещение интернет-магазина. Найдя нужный товар, вы, вероятно, увидели примерно такой URL:

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

Данное руководство охватывает активацию данного модуля, создание и использование страницы .htaccess, а также настройку переписывания URL-адресов.

Требования

Для выполнения данного руководства понадобятся привилегии root (чтобы получить более подробную информацию, читайте статью «Начальная настройка сервера Ubuntu»).

Кроме того, нужно предварительно установить apache. Для быстрой установки этого веб-сервера в Ubuntu используйте команду:

sudo apt-get install apache2

1: Включение mod_rewrite

Для начала нужно включить mod_rewrite, это очень просто:

Данная команда включит модуль или же выведет сообщение «Module rewrite already enabled» в случае если модуль уже включен.

2: Что такое .htaccess?

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

Файл .htaccess – это способ тонкой настройки сайта без необходимости изменять файлы конфигурации сервера. Точка, с которой начинается имя файла, значит, что этот файл является скрытым.

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

Создать файл .htaccess можно при помощи текстового редактора, а затем выгрузить его на сайт при помощи ftp-клиента.

Обратите внимание: файл должен называться именно .htaccess; имя файла не должно содержать дополнительных расширений.

В качестве альтернативы можно создать файл .htaccess через терминал при помощи этой команды, заменив example.com доменным именем сайта.

sudo nano /var/www/example.com/.htaccess

Включение файла .htaccess

Чтобы разрешить файлу .htaccess переопределять стандартные настройки сайта, откройте конфигурационный файл.

Примечание: для этого понадобятся расширенные привилегии sudo.

sudo nano /etc/apache2/sites-available/default

В этом файле найдите следующий раздел и измените значение строки AllowOverride (замените None на All). В результате раздел будет иметь такой вид:


Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all

Сохранив изменения и закрыв файл, перезапустите сервер apache. Теперь файлы .htacess доступны всем сайтам сервера.

sudo service apache2 restart

Теперь все готово для переписывания URL-адресов сайта.

3: Переписывание URL-адресов

Вся операция переписывания URL происходит в файле .htaccess. В целом, все команды перезаписи URL-адреса следовать той же схеме:

RewriteRule Pattern Substitution [OptionalFlags]

Опции, использованные в данной команде:

  • RewriteRule: Это раздел, в котором можно задать нужные директивы.
  • Pattern: этот раздел предназначен для интерпретации нужного URL-адреса с помощью регулярных выражений. Это руководство не охватывает регулярные выражения; некоторую полезную информацию по этому вопросу можно найти на сайте Apache.
  • Substitution: отображает фактический URL страницы. Такую ссылку трудно запомнить, поскольку она состоит из параметров PHP или длинных последовательностей цифр, например: www.bestshop.com/gadgets.php?innovation=laptops
  • Optional Flags: флаг представляет собой тег в конце директивы RewriteRule, способный изменить поведение выражения. Некоторые общие флаги: [F] запрещает URL, [NC] игнорирует заглавные буквы, [R = 301] или [R = 302] контролируют используемый код переадресации, [L] говорит о том, что это последнее правило в серии.

Примеры перезаписи URL-адреса

Пример 1: открываете страницу А – попадаете на страницу Б

Это наиболее простой пример перезаписи URL: посетитель сайта вводит в браузер один URL, но перенаправляется на другой. Чтобы настроить такое поведение, следуйте инструкциям этого раздела.

Для начала создайте две страницы сайта; например, первая о яблоках (apples.html), а вторая – об апельсинах (oranges.html).



This page is about Apples


Затем создайте вторую страницу (в данном случае, страницу, посвященную апельсинам). Для этого просто замените Apples в этом блоке кода на Oranges.

Затем откройте файл .htaccess:

sudo nano /var/www/example.com/.htaccess

Внесите в него следующие команды перезаписи URL:

RewriteEngine on
RewriteRule ^oranges.html$ apples.html

Сохраните и закройте файл.

Затем посетите страницу /oranges.html, она будет содержать информацию страницы /apples.html.

Рассмотрим вышеприведенную команду подробнее:

  • ^oranges.html: указывает, как начинается нужная страница. Каре (^) указывает на начало строки. Другими словами, если бы страница, URL которой нужно переписать, начиналась иначе (например, не oranges.html, а oranges_1.html), она не совпала бы с правилом перезаписи (rewrite rule) и не была бы перенаправлена на страницу birds.html.
  • $: символ доллара ставится в конце URL-адреса. Опять же, если строка заканчивается иначе (например, содержит какие-либо символы после заявленных последних символов), веб-страница не будет распознана правилом перезаписи.
  • apples.html: на эту страницу браузер направляет трафик.

Пример 2: Параметр как подкаталог в URL-адресе

Он будет гораздо понятнее отображаться как:

Для этого нужно внести в .htaccess следующие строки:

RewriteEngine on
RewriteRule ^products/([A-Za-z0-9-]+)/?$ results.php?products=$1 [NC]

Эти строки состоят из следующих опций:

  • ^products: в данном случае чтобы быть перенаправленным, URL должен начинаться со слова products (имейте в виду, что это относится только к тексту после домена). Опять же, если URL начинается иначе, правило не будет применяться.
  • ([A-Za-z0-9-]+): этот взятый в скобки текст указывает, что URL может состоять из любых символов. Знак плюс указывает, что находиться в скобках может один или несколько символов.
  • /?$: символ доллара обозначает конец строки. Вопросительный знак позволяет ставить в конце строки косую черту (хотя это необязательно).
  • [NC]: это флаг в конце фразы, указывающий, что правило должно игнорировать регистры всех символов.

Пример 3: Настройка чистых ссылок

Эта функция незаменима в том случае, если URL-адреса сайта слишком длинные или сложные.

В качестве примера можно взять такой URL-адрес:

Эта ссылка открывает нужную информацию, но посетитель не сможет быстро запомнить ее при необходимости. Перезапись URL позволяет преобразовать ссылку в более простую и запоминающуюся:

Для этого нужно внести в .htaccess следующие строки (к слову, .htaccess может содержать неограниченное количество таких разделов):

RewriteEngine on
RewriteRule ^(meat|produce|dairy)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3

Рассмотрим этот код подробнее:

  • Каре (символ ^) указывает на начало выражения.
  • (meat|produce|dairy): чтобы ограничить параметры, которые можно отображать, укажите в скобках только разрешенные значения (в этом случае это meat, produce и dairy). Если URL содержит параметр, не внесенный в скобки, перезапись не будет выполнена.
  • ([^/.]+) показывает, что все, кроме символов после символа вставки (в данном случае, косой черты и точки), может быть написано через косую.
  • results.php?products=$1&type=$2&species=$3: каждое значение в круглых скобках будет извлечено и затем вставлено в более длинный URL в части substitution. $1 обозначает первые скобки, $2 – вторые, $3 – соответственно, третьи.

Продолжение статьи можно найти по данной ссылке.

Источник

Как включить 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. Например:

Далее, например, в 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.

Источник

Читайте также:  Linux посмотреть процессы java
Оцените статью