Mod rewrite nginx как включить

Обновлено: 05.07.2024

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

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

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

2: Модуль mod_rewrite

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

sudo a2enmod rewrite

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

sudo service apache2 restart

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

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

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

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

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

RewriteRule pattern substitution [flags]

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

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

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

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

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 ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2

Это правило перепишет ссылку:

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

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

RewriteRule ^([A-Za-z0-9]+)/(summer|winter|fall|spring) results.php?item=$1&season=$2 [QSA]

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

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

RewriteCond TestString Condition [Flags]

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

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

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

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

Теперь все ссылки на несуществующие страницы будут перенаправлены на /admin/home.

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

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

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

ErrorDocument 404 /error.html

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

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

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

RewriteCond % !^(12\.34\.56\.789)$
RewriteRule (.*) - [F,L]

Если сайт будет запрашиваться другими IP-адресами, трафик будет заблокирован.

Вкратце рассмотрим это правило:

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

RewriteCond % ^(12\.34\.56\.789)$
RewriteRule (.*) - [F,L]

Существует множество способов управления доступом к сайту, и файл .htaccess – один из самых простых.

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

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

sudo a2enmod rewrite

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

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

RewriteRule Pattern Substitution [OptionalFlags]

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

Подключения модуля mod_rewrite

Для включения перенаправления средствами Apache, достаточно чтобы модуль mod_rewrite.so был загружен в Apache.

Для того ,чтобы директивы mod_rewrite можно было использовать в .htaccess, надо в конфигурационном файле Apache, в соответствующем разделе "<Directory /путь/до/директории>" прописать:

После внесения изменений в конфигурационный файл Apache, для вступления в силу этих изменений, нужно перезапустить веб сервер:

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

Правила Redirect

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

Redirect или RedirectPermanent

Главный недостаток данных правил заключается в том, что для каждого адреса необходимо прописывать новое правило. Если необходимо сделать несколько редиректов, то каждый новый редирект пишется с новой строки.

Если нужно сделать несколько редиректов, то каждый новый редирект нужно написать с новой строки.

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

RedirectMatch

Этот редирект отличается тем, что в нем можно использовать регулярное выражение. Например, при переносе сайта с Windows на Linux, необходимо сменить все ссылки с *.php на *.aspx:

RewriteRule

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

Рассмотрим самые распространённые варианты её использования.

Редирект с одного сайта на другой

Редирект с www на без www

Или более понятный синтаксис

Вы можете использовать любой.

Редирект с без www на www

Для того, чтобы данное перенаправление работало, должен использоваться только Web-сервер Apache. При использовании связки Nginx+Apache будет возникать ошибка циклической переадресации. Поэтому редирект нужно будет настраивать именно в Nginx

Для того, чтобы данное перенаправление работало, должен использоваться только Web-сервер Apache. При использовании связки Nginx+Apache будет возникать ошибка циклической переадресации. Поэтому редирект нужно будет настраивать именно в Nginx

Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для домена с www, вторая для домена без www:

Секция server для редиректа:

Секция server, где находятся основные настройки домена:

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

Секция server для редиректа:

Секция server, где находятся основные настройки домена.

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

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

Для нового домена в конф. файле nginx

Для существующего домена в конф. файле nginx

Если вы вносите изменения в существующую секцию конф. файла nginx делайте это так: Из основной секции домена удалите строку вида

И создайте новую секцию server такого вида:

После внесения изменений в конфигурационный файл Nginx, для вступления в силу этих изменений, нужно его перезапустить так:

Описание автора сайта
Сервис предназначен для перевода конфигурационного файла Apache .htaccess в инструкции конфигурационного файла nginx.
В первую очередь, сервис задумывался как переводчик инструкций mod_rewrite с htaccess на nginx. Однако, он позволяет переводить другие инструкции, которые можно и резонно перевести из Apache в nginx.
Инструкции, не относящиеся к настройке сервера (например, php_value), игнорируются.
Переводчик не проверяет правильность входящего конфига, в том числе регулярные выражения и логические ошибки.
Результат перевода следует обязательно проверить вручную, а затем разместить в секции server <> конфигурационного файла nginx.

Как перевести файл

Вставьте содержимое файла .htaccess в текстовое поле вверху сайта.
Тыкните кнопочку "Перевести".
Скопируйте готовый конфиг.
Примеры
Например, на файл .htaccess вот с таким содержимым

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

Требования

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

Заключение

Модуль mod_rewrite – один из основных компонентов Apache.

В данном руководстве вы научились создавать файл .htaccess и работать с директивами RewriteRule и RewriteCond.

Регулярное выражение можно быстро проверить с помощью этого онлайн-приложения. Оно сразу же обнаруживает ошибки и даёт рекомендации по их исправлению.

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

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

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

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

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

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

Затем откройте файл .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 может содержать неограниченное количество таких разделов):

Статья давно не обновлялась, поэтому информация могла устареть.

Содержание

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

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

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

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

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

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

Найдите блок <VirtualHost *:80> и добавьте в него такой блок:

etc/apache2/sites-available/default
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

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

/etc/apache2/sites-available/default
<VirtualHost *:80>
<Directory /var/www/html>
. . .
</Directory>
. . .
</VirtualHost>

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

sudo service apache2 restart

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

sudo nano /var/www/html/.htaccess

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

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

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

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

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

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

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

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

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

sudo nano /var/www/html/.htaccess

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

RewriteRule ^about$ about.html [NC]

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

RewriteEngine on
RewriteRule ^about$ about.html [NC]

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

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

А такие ссылки не сработают:

Требования

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

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

sudo apt-get install apache2

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

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

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

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

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

Обратите внимание: файл должен называться именно .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-адресов сайта.

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

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

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

sudo apt-get update

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

sudo apt-get install apache2

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

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

Читайте также: