Что такое mod_rewrite?
Вспомните последнее посещение интернет-магазина. Найдя нужный товар, вы, вероятно, увидели примерно такой URL:
buy-online.com/новое_и_лучшее/нужная_категория_товара/искомый_товар
Это происходит не потому, что разработчики этого сайта потратили уйму времени, чтобы настроить отдельные директории для разных категорий товара, а благодаря удобному модулю по имени mod_rewrite. Данный модуль позволяет создавать пользовательские и упрощенные URL-адреса. На самом деле URL выглядит примерно так:
http://www.buy-online.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?
Данное руководство охватывает активацию данного модуля, создание и использование страницы .htaccess, а также настройку переписывания URL-адресов.
Требования
Для выполнения данного руководства понадобятся привилегии root (чтобы получить более подробную информацию, читайте статью «Начальная настройка сервера Ubuntu»).
Кроме того, нужно предварительно установить apache. Для быстрой установки этого веб-сервера в Ubuntu используйте команду:
sudo apt-get install apache2
1: Включение mod_rewrite
Для начала нужно включить mod_rewrite, это очень просто:
sudo a2enmod 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). В результате раздел будет иметь такой вид:
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Сохранив изменения и закрыв файл, перезапустите сервер 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).
Скопируйте этот код:
<html>
<head>
<title>Apples</title>
</head>
<body>
<h1>This page is about Apples</h1>
</body>
</html>
Затем создайте вторую страницу (в данном случае, страницу, посвященную апельсинам). Для этого просто замените 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-адресе
Проверьте url:
http://example.com/results.php?products=apple
Он будет гораздо понятнее отображаться как:
http://example.com/products/apple
Для этого нужно внести в .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-адрес:
http://example.com/results.php?products=produce&type=fruit&species=apple
Эта ссылка открывает нужную информацию, но посетитель не сможет быстро запомнить ее при необходимости. Перезапись URL позволяет преобразовать ссылку в более простую и запоминающуюся:
http://example.com/produce/fruit/apple
Для этого нужно внести в .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 – соответственно, третьи.
Продолжение статьи можно найти по данной ссылке.