Поиск по сайту:

Как настроить 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-адресов.

Содержание

  1. Как активировать Mod_Rewrite
  2. Как создать и разрешить использование файла .htaccess
  3. Как использовать правила перезаписи
  4. Как использовать директиву Rewrite Cond
  5. Ресурсы

Настраивать

Шаги, описанные в этом руководстве, требуют наличия у пользователя привилегий 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 — на третью.