Как настроить Mod_Rewrite
О Mod_Rewrite
Подумайте о том, когда вы в последний раз заходили на какой-то торговый сайт в поисках одной конкретной вещи, которую вам нужно было купить. Когда вы, наконец, добрались до страницы, URL-адрес, скорее всего, выглядел примерно так:
gizmo.com/latest_and_greatest/specific_gadgets/exactly_what_youre_looking_for
Это не потому, что этому веб-сайту потребовалось время, чтобы настроить каждый отдельный каталог, который вам понадобится для совершения покупки, а из-за удобного модуля под названием Mod_Rewrite. Mod_Rewrite позволяет создавать собственные и упрощенные URL-адреса по мере необходимости. В действительности фактический URL-адрес мог выглядеть ближе к этому:
http://www.gizmo.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?
В этом руководстве мы рассмотрим активацию Mod_Rewrite, создание и использование необходимой страницы .htaccess, а также настройку перезаписи URL-адресов.
Содержание
- Как активировать Mod_Rewrite
- Как создать и разрешить использование файла .htaccess
- Как использовать правила перезаписи
- Как использовать директиву Rewrite Cond
- Ресурсы
Настраивать
Шаги, описанные в этом руководстве, требуют наличия у пользователя привилегий root. Вы можете увидеть, как настроить это в Ubuntu здесь, в шагах 3 и 4.
Кроме того, на вашем сервере должен быть установлен Apache. Если у вас его нет, вы можете скачать его для Ubuntu с помощью этой команды:
sudo apt-get install apache2
Раздел 1 — Как активировать Mod_Rewrites
Прежде чем мы начнем генерировать фактические перезаписи URL-адресов, нам нужно активировать модуль apache mod_rewrite, который ими управляет. Это просто:
sudo a2enmod rewrite
Команда активирует модуль или, если он уже активирован, выводит слова \Перезапись модуля уже включена\
Раздел 2 — О файле .htaccess:
После активации модуля вы можете настроить перезапись URL-адресов, создав файл .htaccess в каталоге вашего веб-сайта.
Файл .htaccess — это способ настройки деталей вашего веб-сайта без необходимости изменения файлов конфигурации сервера. Точка, с которой начинается имя файла, будет держать файл скрытым в папке.
Кроме того, важно расположение файла .htaccess. Конфигурации в этом файле повлияют на все в его каталоге и каталогах под ним.
Вы можете создать файл .htaccess в текстовом редакторе (обязательно назовите его только .htaccess без какого-либо другого расширения или имени), а затем загрузить его на свой сайт через ftp-клиент.
В качестве альтернативы вы можете использовать эту команду, заменив example.com на имя вашего сайта, чтобы создать файл .htaccess в терминале.
sudo nano /var/www/example.com/.htaccess
Как разрешить изменения в файле .htaccess:
Чтобы разрешить файлу .htaccess переопределять стандартные конфигурации веб-сайта, начните с открытия файла конфигурации. NB: для этого шага вам потребуются привилегии 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: это раздел, в котором вы можете указать имя директивы mod_rewrite, которую вы хотите использовать.
- Шаблон. Этот раздел посвящен интерпретации запрошенного URL с использованием регулярных выражений. В этом руководстве не обсуждаются регулярные выражения, но вы можете найти полезный учебник по этому вопросу здесь.
- Подстановка: это фактический URL-адрес страницы с информацией, которую мы хотим отобразить. Это может быть трудно запомнить или сбить с толку из-за параметров php или длинных строк чисел. например. www.cityzoo.com/animals.php?mammals=seals
- Необязательные флаги. Флаг — это тег в конце директивы правила перезаписи, который может изменить поведение выражения. Некоторые распространенные флаги включают [F], запрещающий URL-адрес, [NC], заставляющий правило игнорировать заглавные буквы, [R=301] или [R=302], контролирующий код перенаправления, который вы хотите использовать, [L], указывающий, что это последнее правило в серии.
Три примера перезаписи URL:
Пример 1. Перейти на страницу А, найти страницу Б:
Это самый простой пример перезаписи URL-адреса: посетитель сайта вводит один URL-адрес в браузере, но перенаправляется на другой.
Давайте продолжим и создадим две отдельные страницы для сайта — скажем, одну для яблок (apples.html) и одну для апельсинов (oranges.html):
Скопируйте код на страницу Apple:
<html> <head> <title>Apples</title> </head> <body> <h1>This page is about Apples</h1> </body> </html>
После этого можно сделать оранжевую страницу, заменив все названия фруктов на соответствующие.
Теперь откройте файл .htaccess.
sudo nano /var/www/example.com/.htaccess
Добавьте в файл следующие команды перезаписи URL:
RewriteEngine on RewriteRule ^oranges.html$ apples.html
Сохранить и выйти.
Когда все будет на своих местах, посетите сайт, оканчивающийся на \/oranges.html\ — вся отображаемая информация будет поступать с сайта \/apple.html\.
Теперь пояснение:
- ^oranges.html: это относится к началу страницы. Знак вставки (^) означает начало строки. Другими словами, если страница, URL-адрес которой мы хотим переписать, начинается с чего угодно, кроме апельсинов (например, navel_oranges.html), она не будет распознаваться правилом перезаписи и не будет перенаправлена на apples.html.
- $: знак доллара указывает на конец URL. Если после последних символов в строке есть что-то еще, веб-страница также не будет распознаваться правилом перезаписи.
- apples.html: именно сюда браузер направляет трафик.
Пример 2. URL-адрес веб-сайта содержит параметр. Как сделать так, чтобы он выглядел как подкаталог.
В первом примере речь шла о сайте, который нужно было просто заменить другим. Однако приведенный ниже пример относится к распространенному сценарию, который можно увидеть, когда в 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-адрес должен начинаться с товаров (имейте в виду, что это относится только к тексту после имени домена). Если он начинается с чего-либо другого, правило не будет применяться, и URL-адрес останется прежним.
- ([A-Za-z0-9-]+): содержимое в круглых скобках относится к любой информации, которую можно ввести в URL-адрес. Другими словами, URL-адрес будет переписан, чтобы отражать все, что посетитель сайта вводит после /products/.
- +: Знак плюс указывает, что в скобках может быть один или несколько символов (в отличие, скажем, от одного символа, который является либо буквой, либо цифрой).
- /?$: знак доллара указывает на конец строки. Знак вопроса позволяет последнему символу в строке быть косой чертой (хотя это и не обязательно).
- results.php?products=$1: $1 указывает, куда должна идти строка из шаблона. Другими словами, он поместит информацию, полученную из того, что люди написали в части \([A-Za-z0-9-]+):\. После завершения процесса браузер отобразит информацию со второго URL.
- [NC]: это флаг в конце фразы, указывающий, что правило должно игнорировать регистры всех символов в строке.
Пример 3. У сайта громоздкий URL. Как почистить
Такая ситуация может возникнуть, когда URL-адреса длинные и сложные.
Возьмите приведенный ниже URL в качестве примера:
http://example.com/results.php?products=produce&type=fruit&species=apple
Как бы ни был эффективен URL-адрес в доставке правильного контента, он не очень запоминается для потребителя. Перезапись URL-адреса позволит вам преобразовать URL-адрес во что-то более простое и понятное:
http://example.com/produce/fruit/apple
Для этого нам понадобятся следующие строки в нашем файле .htaccess (вы можете добавить столько разделов, сколько необходимо в файле .htaccess):
RewriteEngine on RewriteRule ^(meat|produce|dairy)/([^/.]+)/([^/.]+)$ results.php?products=$1&type=$2&species=$3
Теперь пояснение:
- Сначала выражение начинается с ^(каретки).
- (мясо|продукты|молочные продукты): если мы хотим ограничить количество вариантов, которые можно ввести, мы можем указать единственные значения, которые мы принимаем: в данном случае разнообразие бакалейных товаров. Если будет введено что-либо, кроме одного из этих трех ключевых слов, переопределение URL-адреса не произойдет.
- Значок ([^/.]+) указывает, что между косой чертой можно написать что угодно, кроме символов, следующих за кареткой, в данном случае косой чертой или точкой.
- results.php?products=$1&type=$2&species=$3: каждое значение в скобках будет извлечено, а затем применено к более длинному URL-адресу в замещающей части выражения. $1 указывает на первую скобку, $2 — на вторую, $3 — на третью.