Включение mod rewrite в apache. Mod rewrite setup Как включить mod_rewrite в любой ОС? Примеры перезаписи URL-адреса

  • 20.03.2024

В данном уроке объясняется, что такое mod_rewrite и как его использовать. Описываются три практичных примера: перенаправление 301, создание дружественных URL и блокирование использования ссылок на изображения.

mod_rewrite - это замечательный модуль веб сервера Apache. Он очень гибкий и может выполнять много полезных функций.

Использование mod_rewrite может представлять определенные трудности для новичков по причине сложного синтаксиса и механизма обработки. Однако, стоит разобраться в нескольких базовых концепциях и можно будет эффективно использовать mod_rewrite для собственного сервера.

В данном уроке мы научимся создавать несколько базовых правил mod_rewrite на реальных примерах, которые можно будет использовать для собственного сайта. Рекомендуется тщательно изучить материал о регулярных выражениях , если вы еще не знаете что это такое.

Что такое mod_rewrite?

mod_rewrite - это модуль сервера Apache для манипуляции (изменения) URL. Часто это означает получение запроса URL от посетителя и посылка ему содержания с другого URL. Например, посетитель вводит следующий URL в адресной строке браузера:

Http://www.example.com/page.html

Обычно Apache отправляет обратно пользователю содержание файла page.html . Однако с помощью mod_rewrite можно отправить содержание с другого URL, например такого:

Http://www.example.com/another_page.html

Важно понимать, что изменение адреса происходит внутри сервера Apache. Адресная строка браузера по прежнему будет показывать http://www.example.com/page.html , но сервер Apache отправит содержание страницы http://www.example.com/another_page.html . В этом заключается отличие от перенаправления HTTP, которое указывает браузеру посетить другой URL.

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

Что можно делать с помощью mod_rewrite

Модуль mod_rewrite позволяет создавать правила манипулирования адресами URL. Например, вы можете вставить значение полученное из запрашиваемого URL в новый URL, организуя динамическое перенаправление URL. Или можно проверить переменные сервера, например, HTTP_USER_AGENT (тип браузера), и изменять URL только если используется браузер, например, Safari, запущенный на iPhone.

Вот несколько обычных функций, которые выполняет mod_rewrite:

  • Создание "дружественных" адресов URL, которые маскируют "корявые" адреса URL. Например, вы можете маскировать с помощью отлично выглядящего адреса URL www.example.com/articles/my-article/ реальный адрес URL www.example.com/display_article.php?articleId=my-article . И каждый сможет использовать "дружественный" адрес URL вместо реального.
  • Блокировать использование ссылок на изображения на вашем сайте. Чтобы остановить использование другими ресурсами изображений, размещенных на вашем сайте, можно использовать mod_rewrite для отправки ошибки "Forbidden", если ссылающийся URL не принадлежит вашему сайту.
  • Перенаправление канонических адресов URL. Многие страницы доступны через несколько адресов URL — например, www.example.com/mypage.html и example.com/mypage.html . Вы можете использовать mod_rewrite постоянного перенаправления браузера на "правильный" URL, например www.example.com/mypage.html . Помимо прочего такое использование mod_rewrite гарантирует отображение правильного URL в результатат поиска.
  • Исключение ошибки 404 в момент реорганизации вашего сайта. Например, вы переделываете сайт и переместили страницу www.example.com/myarticle.html по новому адресу www.example.com/articles/myarticle.html . С помощью mod_rewrite вы можете перенаправить www.example.com/myarticle.html на www.example.com/articles/myarticle.html , так что посетитель не получит ошибку 404 "не найдена" при посещении старого адреса URL. Благодаря гибкости mod_rewrite, можно легко создать правило, которое будет перенаправлять запросы на старые адреса URL на новые адреса.

Как использовать mod_rewrite

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

Две самых важных директивы mod_rewrite:

  • RewriteEngine : Включает/выключает механизм mod_rewrite для текущего запроса.
  • RewriteRule : Описывает правило изменения адреса URL.

Вот простой пример. Создайте файл.htaccess со следующим содержанием и разместите его на вашем сайте:

RewriteEngine on RewriteRule ^dummy\.html$ http://www.google.com/

В данном файле задаются следующие установки:

  • RewriteRule ^dummy\.html$ http://www.google.com/ - перенаправялем запросы к странице dummy.html на сайт Google, используя перенаправление 301.

Если теперь открыть веб-браузер и посетить страницу dummy.html на вашем сайте (например, введя в адресной строке http://www.example.com/dummy.html), то, если все было сделано без ошибок, произойдет перенаправление на сайт http://www.google.com .

Если вы получаете ошибку 404, то вероятно на вашем хостинге не используется mod_rewrite. В данном случае надо обратиться к администратору хостинга.

Как работает RewriteRule

Вы можете использовать директиву RewriteRule для создания правил перенаправления. Обобщенный синтаксис директивы имеет вид:

RewriteRule Pattern Substitution

  • Pattern - регулярное выражение шаблона. Если URL соответствует шаблону, то правило выполняется. Иначе правило пропускается.
  • Substitution - новый URL, который будет использоваться вместо соответствующего шаблону адреса.
  • - один или несколько флагов, которые определяют поведение правила.

Вы можете добавить в файл.htaccess столько правил RewriteRule , сколько нужно. Модуль mod_rewrite проходит все правила каждый раз при запросе, обрабатывая соответствующие адресу URL.

Если правило изменяет запрашиваемый URL на новый адрес, то новый URL используется дальше при проходе по файлу.htaccess , и может соответствовать другому правилу RewriteRule , размещающемуся далее в файле. (Если нужно изменить такое поведение, то надо использовать флаг L ("последнее правило").)

Несколько примеров использования mod_rewrite

Самый простой способ объяснить mod_rewrite - показать его использование при решении практических задач.

Пример 1: исключение ошибки 404

Иногда происходит изменение URL страницы на вашем сайте. Такое может произойти в момент реорганизации содержания. Если поисковый механизм или другие сайты ссылаются на старый адрес URL, то пользователь получит ошибку "404 Not Found", когда он попробует воспользоваться ссылкой.

Для решения данной проблемы вы можете использовать модуль mod_rewrite для перенаправления 301. Таким образом заголовок HTTP отсылается любому браузеру, запросившему старый адрес URL, сообщая ему о том, что страница перемещена по новому адресу. Также поисковые механизмы информируются о том, что надо обновить индексы с новым адресом URL.

Следующий файл.htaccess перенаправит запросы на новый адрес URL:

RewriteEngine on RewriteRule ^my-old-url\.html$ /my-new-url.html

Правило RewriteRule работает так:

  • ^my-old-url\.html$ - регулярное выражение, которому соответствует адрес URL для изменения. Шаблон означает: "соответствует началу адреса URL (^), за которым следует текст "my-old-url.html" , за которым следует символ окончания URL ($)." В регулярном выражении символ точки (.) означает соответствие любому символу, поэтому нужно использовать обратный слэш, чтобы указать, что нам нужна именно точка (\.).
  • /my-new-url.html - вторая часть правила RewriteRule , которая описывает на что нужно менять. В данном случае это просто /my-new-url.html.
  • третья часть правила, которая содержит один или несколько флагов, помещенных в квадратные скобки. Флаги позволяют добавлять определенные опции или действия к правилу. В данном примере используется 2 флага: R=301 означает "использовать перенаправление 301 на новый адрес URL"; а L означает "последнее правило", или другими словами "остановить процесс обработки URL, если он соответствует правилу ".

Пример 2: создание дружественных адресов URL

Допустим, вы написали PHP скрипт display_article.php для вывода статей на вашем сайте. Вы можете ссылаться на статью с помощью следующего адреса URL:

Http://www.example.com/display_article.php?articleId=my-article

Данный адрес выглядит уродливо и запрос внутри него (?articleId=my-article) может смущать некоторые поисковые механизмы. Гораздо лучше использовать адрес URL такого вида:

Http://www.example.com/articles/my-article/

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

RewriteEngine on RewriteRule ^articles/([^/]+)/?$ display_article.php?articleId=$1 [L]

Описание правила RewriteRule:

  • ^articles/([^/]+)/?$ - регулярное выражение, соответствующее любому URL в формате articles/(article ID)/ . Оно гласит:"соответствует началу URL (^) , за которым следует текст articles/ , за которым следует один или более символов, не являющиеся слэшем ([^/]+) , за которыми может следовать слэш (/?) , за которым следует символ окончания URL ($) ". Обратите внимание на круглые скобки вокруг части шаблона [^/]+ . Таким образом текст, соответствующей данной части, например, "my-article" , сохраняется для дальнейшего использования.
  • display_article.php?articleId=$1 - данная часть правила указывает серверу Apache использовать скрипт display_article.php , которому передается текст, соответствующий подшаблону [^/]+ из регулярного выражения первой части (например, "my-article"), в качестве параметра articleId . $1 называется обратной связью и хранит текст соответствующий подшаблону. Если регулярное выражение содержит еще один подшаблон в круглых скобках, то соответствующий ему текст будет храниться в переменной $2, и так далее.
  • [L] - как и в предыдущем примере мы используем флаг для остановки дальнейшей обработки URL, чтобы не произошло изменение адреса другими правилами RewriteRule.

Выше приведенное правило RewriteRule берет запрашиваемый URL в формате http://www.example.com/articles/my-article/ и преобразует его в URL вида http://www.example.com/display_article.php?articleId=my-article .

Пример 3: предотвращаем использование ссылок на изображения на вашем сайте

Еще одной типовой задачей, которую решает использование модуля mod_rewrite, является предотвращение использования ссылок на изображения на вашем сайте другими веб проектами. Допустим, на вашем сайте есть страница http://www.example.com/mypage.html , которая содержит следующий тег img:

Другой сайт может ссылаться на своих страницах прямо на вашу фотографию следующим образом:

Это означает, что чужой сайт не только "заимствует" ваше изображение, но использует часть трафика вашего сервера для отображения изображения на своих страницах. И если чужой сайт имеет большой поток посетителей, то такое положение станет проблемой!

Вы можете использовать следующие директивы mod_rewrite для того, чтобы прекратить использование ссылок на изображения всеми другими сайтами, кроме вашего собственного. Разместите ниже приведенный код в файле.htaccess в корневом каталоге вашего сайта или в папке с изображениями, которые надо защитить. Измените example.com на имя вашего домена.

RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/.*$ RewriteRule .+\.(gif|jpg|png)$ - [F]

Как только вы закончите выполнять все операции копирования любой браузер, запрашивающий изображения с вашего сайта использующий при запросе URL, начинающийся с имени домена, отличного от www.example.com или example.com , будет получать ошибку "403 Forbidden". что остановит использование ссылок на ваши изображения на других сайтах.

Вот как работает данный набор правил:

  • RewriteEngine on - включаем механизм mod_rewrite
  • RewriteCond %{HTTP_REFERER} !^$ - RewriteCond является еще одной директивой mod_rewrite. Она позволяет устанавливать условие, которое должно выполняться для обработки URL следующим за ним правилом RewriteRule . В данном случае условием является наличие значения в переменной HTTP_REFERER .
  • RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/.*$ - вторая директива RewriteCond требует, чтобы значение переменной HTTP_REFERER не начиналось с http://www.example.com/ или http://example.com/ . Флаг устанавливает чувствительность к регистру символов.
  • RewriteRule .+\.(gif|jpg|png)$ - [F] - если два выше предыдущих условия RewriteCond не выполняются, то правило пропускается. Само же правило возвращает ошибку "403 Forbidden" (используется флаг [F]), если URL содержит имя файла изображения (строка заканчивается на.gif , .jpg или.png), Тире в параметре подстановки означает "не надо заменять URL другим адресом".

То есть весь набор правил в файле.htaccess гласит, если переменная HTTP_REFERER содержит значение, и оно не начинается на http://example.com/ или http://www.example.com/ , и запрашиваемый URL содержит имя файла изображения, то надо отказать запросу с ошибкой "403 Forbidden".

Заключение

В данном уроке мы провели введение в использование модуля сервера Apache mod_rewrite для манипулирования адресами URL. Рассмотренные три практических примера затрагивают лишь небольшую часть всех возможностей модуля. Более подробную информацию о mod-rewrite на русском языке можно найти .

Важно :

    Поддержка файла «.htaccess» есть только на хостинге Linux. На Windows хостинге функцию «.htaccess» выполняет файл web.config .

    Модуль поддержки «.htaccess» доступен на всех тарифах виртуального хостинга на основе ОС Linux. Если при установке CMS появляется сообщение об отсутствии поддержки «.htaccess» просто проигнорируйте его.

У меня нет файла.htaccess, что делать?

Если вы настраиваете web-сервер Apache, но у вас нет файла .htaccess , создайте его и пропишите нужные директивы.

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

Если вы случайно удалили файл .htaccess , восстановите его . Или добавить стандартный файл .htaccess для вашей CMS:

В cPanel не видно файла.htaccess

Чтобы увидеть скрытые файлы (начинающиеся с точки) в cPanel, необходимо выполнить следующие действия:

Как включить mod rewrite?

Модуль «mod_rewrite» присутствует на всех тарифных планах хостинга Linux. Чтобы активировать «mod_rewrite» добавьте в файл .htaccess строку вида.

Данное руководство поможет настроить перезапись URL-адресов на Apache2 с помощью модуля mod_rewrite. Этот инструмент позволяет переписывать URL-адреса и создавать чистые ссылки, преобразовывая сложные пути в понятные и читабельные ссылки.

Требования

  • Сервер Ubuntu 14.04.
  • Пользователь с доступом к sudo (подробности можно найти в руководстве ).

1: Установка Apache

Apache можно установить с помощью пакетного менеджера apt-get.

Сначала нужно обновить индекс пакетов:

sudo apt-get update

Apache – это популярный модульный веб-сервер (то есть, он позволяет настраивать функции путём включения и отключения модулей). Чтобы установить Apache 2, введите:

sudo apt-get install apache2

Сервер Apache успешно установлен.

Теперь нужно сосредоточить внимание на модулях.

2: Модуль mod_rewrite

Чтобы включить mod_rewrite, введите:

sudo a2enmod rewrite

Команда включит модуль и сообщит вам о том, что модуль работает. Чтобы обновить настройки веб-сервера, перезапустите его:

sudo service apache2 restart

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

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

Файл.htaccess определяет индивидуальные директивы Apache для каждого отдельного домена.

Примечание : В Linux с символа точки начинаются имена скрытых файлов.

Сначала нужно включить поддержку файлов.htaccess. Для этого отредактируйте директиву AllowOverride в конфигурационном файле Apache. Откройте файл:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Найдите блок и добавьте в него такой блок:

etc/apache2/sites-available/default

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

Теперь конфигурационный файл веб-сервера должен выглядеть так:

/etc/apache2/sites-available/default


. . .

. . .

Чтобы обновить настройки, перезапустите Apache.

sudo service apache2 restart

Создайте файл.htaccess:

Добавьте в начало нового файла такую строку, чтобы активировать RewriteEngine:

RewriteEngine on

Сохраните и закройте файл. Так Apache сможет обрабатывать правила перезаписи.

Другие пользователи должны иметь только право на чтение.htaccess. Измените права доступа к файлу:

sudo chmod 644 /var/www/html/.htaccess

4: Настройка перезаписи

Данный раздел покажет, как настроить базовую перезапись URL-адресов. В качестве примера используется ссылка example.com/about.

Создайте файл about.html:

sudo nano /var/www/html/about.html

Скопируйте следующий код и поместите его в файл:



About Us


About Us



Обратите внимание: доступ можно получить только к about.html. Если вы введёте ссылку ip_адрес_сервера /about, вы получите ошибку 404 Not Found. Создайте правило перезаписи, чтобы исправить это.

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

sudo nano /var/www/html/.htaccess

Добавьте в него следующую строку:

RewriteRule ^about$ about.html

Теперь файл содержит такие настройки:

RewriteEngine on
RewriteRule ^about$ about.html

Теперь браузер сможет обслуживать страницу example.com/about.

На примере этого правила можно рассмотреть общий синтаксис перезаписи.

  • ^about$ — шаблон, с которым совпадает URL, и который пользователи вводят в браузере. В данном примере используются метасимволы, благодаря которым можно чётко обозначить местонахождение шаблона: символ ^ определяет начало шаблона, а $ — конец.
  • about.html: исходный путь к странице, по которому обслуживается файл about.html.
  • : флаг, который отключает чувствительность URL-адреса к регистру.

Согласно этому правилу, доступ к странице можно получить по следующим ссылкам:

example.com/about
example.com/About
example.com/about.html

example.com/about/
example.com/contact

Общие шаблоны

Итак, теперь вы знаете основы написания правил перезаписи. Рассмотрим два дополнительных примера.

Примечание : Для тестирования можно создать пару дополнительных файлов.

Пример 1: Упрощение строки запросов с помощью RewriteRule

Правила RewriteRule имеют такой формат:

RewriteRule pattern substitution

  • RewriteRule: директива.
  • pattern: регулярное выражение, которое задаёт шаблон поиска строки.
  • substitution: целевой URL-адрес
  • flags: опциональные параметры, которые изменяют поведение правила.

Приложения часто используют строки запросов. Эти строки находятся в URL-адресе, начиная с вопросительного знака (?) и заканчивая амперсандом (&). Обрабатывая правила перезаписи, Apache игнорирует эти два символа. К примеру, URL страницы результатов поиска, написанной на PHP, может выглядеть следующим образом:

http://example.com/results.php?item=shirt&season=summer

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

http://example.com/shirt/summer

Этого можно добиться двумя способами: с помощью простой замены или группирования параметров.

1: Простая замена

Создайте правило, выполняющее простую замену, чтобы ссылка стала чистой:

RewriteRule ^shirt/summer$ results.php?item=shirt&season=summer

Это правило вместо results.php?item=shirt&season=summer будет использовать shirt/summer.

2: Сопоставление и группирование

В некоторых ситуациях нужно оптимизировать строку запросов (к примеру, чтобы она включала все сезоны). Для этого нужно:

  • Задать набор параметров, разделив их с помощью символа вертикальной черты | (логический оператор OR).
  • Сгруппировать все заданные параметры с помощью круглых скобок (), а затем сослаться на группу с помощью переменной $1 (где 1 – номер группы параметров).

В результате получится такое правило:

RewriteRule ^shirt/(summer|winter|fall|spring) results.php?item=shirt&season=$1

Это правило добавляет в URL новый сегмент.

3: Совпадение наборов символов

Чтобы пользователь мог открыть чистый URL любого раздела сайта (не только / shirt), нужно:

  • Написать регулярное выражение, совпадающее со всеми алфавитно-цифровыми символами. В квадратных скобках указывается поисковой шаблон (в данном случае он включает все символы), а символ + указывет что каждый символ в шаблоне может повторяться неограниченное количество раз.
  • Сгруппировать этот набор символов и присвоить ему $2.

RewriteRule ^(+)/(summer|winter|fall|spring) results.php?item=$1&season=$2

http://example.com/results.php?item=pants&season=summer

http://example.com/pants/summer

4: Дополнительная строка запроса

Это позволит вам устранить ряд потенциальных проблем. Попробуйте преобразовать:

http://example.com/pants/summer?page=2

http://example.com/results.php?item=pants&season=summer&page=2

При текущих настройках вы не сможете перейти на page=2. Это можно исправить с помощью флага QSA, который позволяет комбинировать строки запросов. Отредактируйте правило следующим образом:

RewriteRule ^(+)/(summer|winter|fall|spring) results.php?item=$1&season=$2

Пример 2: Условия RewriteCond

Теперь рассмотрим подробнее директиву RewriteCond. RewriteCond имеет такой формат:

RewriteCond TestString Condition

  • RewriteCond: директива.
  • TestString: строка для сравнения.
  • Condition: шаблон, с которым нужно сравнить строку.
  • Flags: дополнительные параметры.

Если условие перезаписи RewriteCond истинно, Apache обработает следующее за ним правило RewriteRule.

1: Страница по умолчанию

Ранее вы видели, что в случае если запрашиваемой страницы не существует, Apache возвращает страницу ошибки 404 Not Found. Однако вместо этого Apache может перенаправлять все подобные запросы на домашнюю страницу. Добавьте следующее условие, чтобы убедиться, что запрашиваемый файл существует:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/(.*)$ /admin/home

Рассмотрим вышеприведённое правило по частям:

  • %{REQUEST_FILENAME} проверяет запрашиваемую строку.
  • !-f: оператор! (not) указывает, что если запрашиваемого файла не существует, веб-сервер должен выполнить следующее правило переадресации.
  • RewriteRule перенаправляет запрос на /admin/home.

Также можно задать ErrorDocument, на который будут отправляться все запросы на несуществующие страницы. Создайте правило ErrorDocument и перенаправьте все ошибки 404 на страницу error.html:

ErrorDocument 404 /error.html

2: Ограничение доступа по IP

RewriteCond позволяет ограничивать доступ к сайту по IP-адресу.

К примеру, это правило заблокирует весь трафик, кроме 12.34.56.789:

RewriteCond %{REMOTE_ADDR} !^(12\.34\.56\.789)$
RewriteRule (.*) -

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

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

http://www.buy-online.com/gp/itemB004RYVI0Q/ref=as_li_ss_tl?

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

Требования

Кроме того, нужно предварительно установить 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 доменным именем сайта.

Включение файла.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

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

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

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

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

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

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

Скопируйте этот код:



Apples


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-адресе

Проверьте url:

http://example.com/results.php?products=apple

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

http://example.com/products/apple

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

RewriteEngine on
RewriteRule ^products/(+)/?$ results.php?products=$1

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

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

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

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

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

http://example.com/results.php?products=produce&type=fruit&species=apple

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 – соответственно, третьи.

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

Tags: ,

andew

2015-02-13T11:59:58+00:00

2018-03-02T04:50:41+00:00

42066

В статье я привожу описание логики работы правилаRewriteRule и синтаксис некоторых директив модуля mod_rewrite сервера Apache. Также я выделил и обобщил несколько выводов-постулатов, которые, как мне кажется, нужно обязательно знать и понимать при использовании этого модуля. Надеюсь, что все это позволит вам, так же, как и мне ранее, разобраться с работой этого модуля, предоставляющего мощный функционал для выполнения различных преобразований над URL .

Не забывайте в регулярном выражении экранировать служебные символы. Иногда забывают экранировать точку, когда она должна выступать именно как точка, а не как принято в регулярном выражении - как любой символ.

Также не забывайте оборачивать весь блок правил для mod_rewrite в тег:

Не пишите излишне много директив для mod_rewrite , пишите только те правила преобразования, которые вам действительно необходимы. Особенно нужно быть аккуратным с внешними ридиректами - это такие ридиректы, которые выполняются путем отправки клиенту серверного заголовка с кодом НЕ 200 (отдача полноценной страницы), а с другим кодом (чаше всего 301 и 302 ) и которые приводят к перенаправлению в браузере клиента на другой URL т.е. к совершению нового запроса на клиенте. Поэтому любой внешний ридирект всегда приводит к потере времени в обработки запроса, т.к. нужно отправить клиенту ответ, он должен его прочитать, и повторить запрос уже по новому URL. Это затратная по времени процедура. Поэтому ридиректы должны быть только если они действительно вам необходимы.

Учитывайте, что браузеры могут кешировать редиректы, при этом Ctrl+F5 или Ctrl+R не снимает проблему. Поэтому отключайте кеширование в браузере при тестировании ваших правил rewrite модуля web сервера Apache .

Для поиска ошибок работы ваших правил читайте логи Apache .

Не делайте тупой копи-паст директив из различных статей в интернете в свои файлы настроек apache. Cтатьи пишут люди и поэтому возможны ошибочные написания директив, и если учесть, что метод написания статей также подразумевает активное использование копипаста, то ошибки могут распространяться и множиться. Используйте статьи только как справку, а в свои настроечные файлы вписываете директивы из руководств. Хотя это тоже не гарантирует на сто процентов от ошибок, но хотя бы вы из минимизируете.

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