Mod rewrite как включить centos
Перейти к содержимому

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

  • автор:

Как включить mod_rewrite?

mod_rewrite — это модуль синтаксического анализа для веб-сервера Apache, использующий регулярные выражения (Шпаргалка RegExp: Метасимволы, Максимализм квантификатора, Алфавиты и блоки), выполняющий Что такое ссылка URL преобразования на лету. Включение и настройка производятся через конфигурационный файл Настройка .htaccess сервера Apache или в конфигурации сервера (httpd.conf).

Как включить mod_rewrite? Для подключения модуля к Apache нужно создать символическую ссылку, при помощи команды a2enmod и перезапустить сервер веб-сервер

# a2enmod rewrite # ls -l /etc/apache2/mods-enabled/rewrite.load lrwxrwxrwx 1 root root 30 сент. 27 13:25 /etc/apache2/mods-enabled/rewrite.load -> ../mods-available/rewrite.load # systemctl restart apache2

Модуль mod_rewrite поддерживает неограниченное количество правил и связанных с каждым правилом условий. URL преобразования могут использовать разные источники данных, например переменные сервера, переменные окружения, Коды состояния HTTP. Методы и структура протокола HTTP заголовки, время и даже запросы к внешним базам данных в разных форматах, — для получения URL нужного вам вида.

Включить модуль Apache mod_rewrite

Веб-сервер Apache является распространенным веб-сервером между различными дистрибутивами Linux.Эта популярность частично связана с ее модульной конструкцией, которая позволяет настроить веб-сервер, чтобы соответствовать вашим потребностям, включив или отключив модули.Одним из тех модулей является модуль MOD_REWRITE, который мы охватим, как включить в этой статье.Прежде чем мы начнем, вам нужно будет гарантировать, что вы вошли в свой сервер через SSH.Если вы не уверены, как получить доступ к вашему серверу, используя SSH, обратитесь к нашему руководству, который охватывает эту тему более подробно: подключение к вашему серверу через SSH.

Шаг 1 — Убедитесь, что Apache установлен и работает.

Если вы не установили Apache в этот момент, вы можете сделать это сейчас, выдавая следующую команду. Если вы уже установили Apache, вы можете перейти к следующему шагу.

yum install httpd -y 

После установки запустите Apache с помощью systemctl:

systemctl start httpd 

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

systemctl status httpd 

Вы должны увидеть следующий результат, если Apache запущен.

systemd[1]: Starting The Apache HTTP Server. systemd[1]: Started The Apache HTTP Server. 

Шаг 2 — Включите mod_rewrite

Большинство современных версий CentOS, такие как Centos 7, по умолчанию включены Mod_ReWrite. Однако мы можем проверить это, используя следующую команду, которая будет перечислена все загруженные в настоящее время модули:

httpd -M | grep rewrite 

Если модуль MOD_REWRITE загружен в настоящее время, вы должны увидеть вывод, аналогичный следующему:

rewrite_module (shared) 

Если модуль не указан на выходе, вам нужно будет включить его.Как правило, это может быть достигнуто одним из двух способов в среде Centos.Первый метод состоит в том, чтобы добавить следующую строку в файл 00-base.conf, используя ваш любимый текстовый редактор.Для этой статьи мы будем использовать Nano, как вы можете увидеть ниже.

nano /etc/httpd/conf.modules.d/00-base.conf 

После открытия файла добавьте или раскомментируйте следующую строку:

LoadModule rewrite_module modules/mod_rewrite.so 

Второй способ — добавить или раскомментировать ту же строку, что и выше, непосредственно в файл httpd.conf:

nano /etc/httpd/conf/httpd.conf 
LoadModule rewrite_module modules/mod_rewrite.so 

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

systemctl restart httpd 

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

Написано Michael Brower / Июнь 22, 2017

Включить модуль mod_rewrite для Apache в Debian/Ubuntu

Иногда люди сталкиваются с проблемой — сервер apache не читает ваш файл .htaccess или apache не переписывает URL, а мы используем правильные правила перезаписи в конфигурационных файлах. Это происходит из-за того, что модуль rewrite не включен в apache. Т.к модуль mod_rewrite не включен по умолчанию на сервер, поэтому для использования rewrite, нужно вручную включить mode_rewrite. В моей статье «Включить модуль mod_rewrite для Apache в Debian/Ubuntu» я расскажу как я это могу сделать.

1. Включение модуля mod_rewrite в Apache2

Для этого, я использую команду «a2enmod», чтобы включить любые модули в веб-сервере Apache 2. Так что, используйте следующую команду чтобы включить mod_rewrite модуль для apache:

$ sudo a2enmod rewrite

2. Активировать ReWrite в вирутальном хосте

После включения модуля ReWrite для Apache необходимо добавить «AllowOverride All» в вашем файле конфигурации для виртуального хоста. Этот параметр также может быть включен в глобальном масштабе, путем редактирования основного файла конфигурации apache:

 Options Indexes FollowSymLinks AllowOverride All 

3. Перезапуск конфигурации Apache2

После включения модуля mod_rewrite для Apache нужно перезагрузить сервер Apache2:

# service apache2 restart

Тема «Включить модуль mod_rewrite для Apache в Debian/Ubuntu» завершена.

Настройка mod_rewrite на веб-сервере Apache в CentOS 7

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

Данное руководство поможет установить Apache на сервер CentOS 7 и настроить поддержку mod_rewrite.

Требования

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

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

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

sudo yum install httpd

Команда запросит подтверждения:

Чтобы продолжить установку, введите Y и нажмите Enter.

Запустите демон Apache (это автономный процесс, который создаёт пул дочерних процессов или потоков для обработки запросов):

sudo systemctl start httpd

Чтобы убедиться в том, что запуск Apache прошёл успешно, введите:

sudo systemctl status httpd
. . .
systemd[1]: Starting The Apache HTTP Server.
systemd[1]: Started The Apache HTTP Server .

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

2: Модуль mod_rewrite

В CentOS 7 модуль mod_rewrite поддерживается по умолчанию. Проверьте, так ли это. Используйте команду httpd с флагом –M, чтобы вывести список включенных модулей:

httpd -M
. . .
remoteip_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
slotmem_plain_module (shared)
. . .

Если в списке нет модуля rewrite_module, включите его вручную. Отредактируйте 00-base.conf.

sudo vi /etc/httpd/conf.modules.d/00-base.conf

Когда текстовый редактор откроется, перейдите в режим вставки (нажмите i) и добавьте в файл:

#
# This file loads most of the modules included with the Apache HTTP
# Server itself.
#
. . .
LoadModule rewrite_module modules/mod_rewrite.so
. . .

Чтобы выйти из режима вставки, нажмите Esc. Нажмите 😡 и Enter, чтобы сохранить и закрыть файл.

Обновите настройки веб-сервера:

sudo systemctl restart httpd

Теперь можно приступать к созданию файла .htaccess.

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

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

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

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

sudo vi /etc/httpd/conf/httpd.conf

Найдите в этом файле раздел . Он содержит AllowOverride. Измените значение None на All.

. . .

. . .
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be «All», «None», or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
. . .

. . .

Сохраните и закройте файл. Перезапустите Apache:

sudo systemctl restart httpd

Создайте файл .htaccess в стандартном каталоге document root (/var/www/html):

sudo vi /var/www/html/.htaccess

Добавьте в начало файла следующую строку, чтобы активировать RewriteEngine. Так Apache сможет обрабатывать правила перезаписи.

Теперь на сервере есть файл .htaccess, который позволяет установить правила перезаписи URL-ов. Прежде чем приступить к написанию этих правил, нужно ознакомиться с синтаксисом mod_rewrite.

4: Синтаксис RewriteRule

Директива RewriteRule позволяет преобразовать запросы Apache на основе URL-адреса. Файл .htaccess может содержать множество правил перезаписи. Apache применяет правила в том порядке, в котором они определены в файле. RewriteRule имеет такую структуру:

RewriteRule Pattern Substitution [Flags]

  • RewriteRule: собственно директива.
  • Pattern: библиотека PCRE (Perl Compatible Regular Expression). Больше информации об этом можно найти здесь.
  • Substitution: куда отправить поступивший запрос.
  • [Flags]: опциональные параметры, изменяющие поведение правила. Список доступных флагов можно найти в документации Apache.

Директива RewriteRule очень важна для mod_rewrite.

5: Синтаксис RewriteCond

Директива RewriteCond позволяет добавлять условия в правило перезаписи. Условие перезаписи состоит из следующих компонентов:

RewriteCond TestString Condition [Flags]

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

Благодаря директиве RewriteCond Apache пвыполняет перезапись только в том случае, если определённое условие истинно.

6: Создание тестового файла

Создайте простое правило, которое позволит пользователям получать доступ к странице about.html без расширения (.html). Для начала создайте файл about.html в каталоге document root:

sudo vi /var/www/html/about.html

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



About Us

About Us


Сохраните и закройте файл.

Откройте браузер и перейдите по ссылке:

На экране появится страница с заголовком About Us. Попробуйте удалить из ссылки расширение .html. Браузер отобразит сообщение об ошибке 404 Not Found. По умолчанию Apache получает доступ к компонентам с помощью полного имени файла. Модуль mod_rewrite может изменить это поведение.

7: Настройка RewriteRule

Теперь попробуйте сделать так, чтобы посетители страницы About Us могли получить к ней доступ без расширения .html в ссылке. Для этого нужно создать правило.

sudo vi /var/www/html/.htaccess

Найдите строку RewriteEngine On и добавьте после неё следующую строку:

RewriteRule ^about$ about.html [NC]

Сохраните и закройте файл.

Теперь в ссылке на страницу About Us не будет расширения:

Рассмотрим это правило подробнее:

  • ^about$ – шаблон, с которым совпадает URL, и который пользователи вводят в браузере. В данном примере используются метасимволы, благодаря которым можно чётко обозначить местонахождение шаблона: символ ^ определяет начало шаблона (после server_domain_or_IP/), а & – конец.
  • about.html – путь к файлу, который обслуживает Apache, когда встречает этот шаблон.
  • [NC] – флаг, который отключает учет регистра, благодаря чему пользователи могут вводить адрес как в верхнем, так и в нижнем регистре. К примеру, URL-адреса serverdomainor_IP/about, serverdomainor_IP/About и serverdomainor_IP/ABOUT отобразят страницу about.html.

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

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

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

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

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

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

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

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

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

RewriteRule ^shoes/women$ results.php?item=shoes&type=women

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

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

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

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

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

RewriteRule ^shoes/(men|women|youth) results.php?item=shoes&type=$1

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

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

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

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

RewriteRule ^([A-Za-z0-9]+)/(men|women|youth) results.php?item=$1&type=$2

Это правило преобразует:

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

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

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

RewriteRule ^([A-Za-z0-9]+)/(men|women|youth) results.php?item=$1&type=$2 [QSA]

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

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

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

Ранее вы видели, что в случае если запрашиваемой страницы не существует, 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

Теперь все запросы, которые получили ошибку 404, будут переадресованы на error.html.

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

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

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

RewriteCond % !^(198\.51\.100\.24)$
RewriteRule (.*) — [F,L]

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

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

  • % – строка адреса.
  • !^(198\.51\.100\.24)$ – IP-адрес. Обратный слеш позволяет обойти метасимвол «.».

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

RewriteCond % ^(198\.51\.100\.24)$
RewriteRule (.*) — [F,L]

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

Заключение

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

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

  • Основы mod_rewrite
  • Документация Apache для mod_rewrite

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *