- Как включить mod_rewrite в Windows
- Настройка mod_rewrite на веб-сервере Apache в Ubuntu 14.04
- Требования
- 1: Установка Apache
- 2: Модуль mod_rewrite
- 3: Создание файла .htaccess
- 4: Настройка перезаписи
- Настройка mod_rewrite на веб-сервере Apache в CentOS 7
- Требования
- 1: Установка Apache
- 2: Модуль mod_rewrite
- 3: Создание файла .htaccess
- 4: Синтаксис RewriteRule
- 5: Синтаксис RewriteCond
- 6: Создание тестового файла
- Настройка mod_rewrite
- Что такое mod_rewrite?
- Требования
- 1: Включение mod_rewrite
- 2: Что такое .htaccess?
- Включение файла .htaccess
- 3: Переписывание URL-адресов
- Примеры перезаписи URL-адреса
- Пример 1: открываете страницу А – попадаете на страницу Б
- mod_rewrite — просто о сложном
- Что это такое?
- Hello world
- А что еще умеет mod_rewrite?
- Другие применения
Как включить mod_rewrite в Windows
mod_rewrite предоставляет возможность динамически изменять входящие URL-запросы, основываясь на правилах, использующих регулярные выражения.
mod_rewrite – это опциональный (необязательный) модуль веб-сервера Apache, который по умолчанию отключён. Поэтому работу с mod_rewrite нужно начать с его включения в веб-сервере. Правила для преобразования URL-запросов записываются в .htaccess. Это означает, что для работы mod_rewrite нужно:
- включить непосредственно сам mod_rewrite
- включить поддержку файлов .htaccess
Для включения mod_rewrite, в файле httpd.conf (C:\Server\bin\Apache24\conf\httpd.conf) найдите и раскомментируйте строку:
Для включения поддержки файла .htaccess в конфигурационном файле Apache httpd.conf (C:\Server\bin\Apache24\conf\httpd.conf) найдите группу строк:
В Windows она может выглядеть так:
В этой группе строк замените
Сохраните файл настройки Apache и перезапустите сам веб-сервер. Если вы не знаете, как это сделать, то просто перезагрузите компьютер.
Если вам нужна подробная инструкция о том, как использовать mod_rewrite и как писать правила, то обратитесь к «Полному руководству по mod_rewrite».
Настройка mod_rewrite на веб-сервере Apache в Ubuntu 14.04
Данное руководство поможет настроить перезапись URL-адресов на Apache2 с помощью модуля mod_rewrite. Этот инструмент позволяет переписывать URL-адреса и создавать чистые ссылки, преобразовывая сложные пути в понятные и читабельные ссылки.
Требования
- Сервер Ubuntu 14.04.
- Пользователь с доступом к sudo (подробности можно найти в руководстве Добавление и удаление пользователей в Ubuntu 14.04).
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
Теперь конфигурационный файл веб-сервера должен выглядеть так:
Чтобы обновить настройки, перезапустите Apache.
sudo service apache2 restart
Создайте файл .htaccess:
sudo nano /var/www/html/.htaccess
Добавьте в начало нового файла такую строку, чтобы активировать RewriteEngine:
Сохраните и закройте файл. Так Apache сможет обрабатывать правила перезаписи.
Другие пользователи должны иметь только право на чтение .htaccess. Измените права доступа к файлу:
sudo chmod 644 /var/www/html/.htaccess
4: Настройка перезаписи
Данный раздел покажет, как настроить базовую перезапись URL-адресов. В качестве примера используется ссылка example.com/about.
Создайте файл about.html:
sudo nano /var/www/html/about.html
Скопируйте следующий код и поместите его в файл:
Настройка 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 и вставьте в файл:
Настройка mod_rewrite
Что такое mod_rewrite?
Вспомните последнее посещение интернет-магазина. Найдя нужный товар, вы, вероятно, увидели примерно такой URL:
Это происходит не потому, что разработчики этого сайта потратили уйму времени, чтобы настроить отдельные директории для разных категорий товара, а благодаря удобному модулю по имени mod_rewrite. Данный модуль позволяет создавать пользовательские и упрощенные URL-адреса. На самом деле URL выглядит примерно так:
Данное руководство охватывает активацию данного модуля, создание и использование страницы .htaccess, а также настройку переписывания URL-адресов.
Требования
Для выполнения данного руководства понадобятся привилегии root (чтобы получить более подробную информацию, читайте статью «Начальная настройка сервера Ubuntu»).
Кроме того, нужно предварительно установить 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 доменным именем сайта.
sudo nano /var/www/example.com/.htaccess
Включение файла .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 [OptionalFlags]
Опции, использованные в данной команде:
- RewriteRule: Это раздел, в котором можно задать нужные директивы.
- Pattern: этот раздел предназначен для интерпретации нужного URL-адреса с помощью регулярных выражений. Это руководство не охватывает регулярные выражения; некоторую полезную информацию по этому вопросу можно найти на сайте Apache.
- Substitution: отображает фактический URL страницы. Такую ссылку трудно запомнить, поскольку она состоит из параметров PHP или длинных последовательностей цифр, например: www.bestshop.com/gadgets.php?innovation=laptops
- Optional Flags: флаг представляет собой тег в конце директивы RewriteRule, способный изменить поведение выражения. Некоторые общие флаги: [F] запрещает URL, [NC] игнорирует заглавные буквы, [R = 301] или [R = 302] контролируют используемый код переадресации, [L] говорит о том, что это последнее правило в серии.
Примеры перезаписи URL-адреса
Пример 1: открываете страницу А – попадаете на страницу Б
Это наиболее простой пример перезаписи URL: посетитель сайта вводит в браузер один URL, но перенаправляется на другой. Чтобы настроить такое поведение, следуйте инструкциям этого раздела.
mod_rewrite — просто о сложном
Что это такое?
mod_rewrite — это модуль для веб-сервера Apache, предназначенный для преобразования URL-ов. Модуль использует в своей работе правила, которые могут быть описаны как в конфигурации сервера (httpd.conf), так и в файлах .htaccess непосредственно в файловой структуре Вашего сайта. Правила описываются в виде регулярных выражений PCRE
Hello world
Простейший пример. Допустим, Вы захотели, чтобы никто не знал, что Ваш сайт написан на PHP и решили замаскировать расширения файлов. Можно, конечно, внести соответствующую директиву в конфигурацию Apache и тогда все файлы с расширением «.msl» («My Super Language») будут обрабатываться интерпретатором PHP. Но можно поступить проще:
создаем в корне нашего сайта файл .htaccess со следующим содержимым
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)\.msl$ $1.php [QSA,L]
Первая директива включает механизм mod_rewrite в текущей папке и во всех ее подпапках. Вторая указывает модулю mod_rewrite, что текущая папка в файловой системе соответствует корню сайта. Третья — непосредственно правило преобразования URL.
Прочесть его можно так:
Если сразу после начала строки («^») идет произвольное количество любых символов ( «(.*)» ), причем мы хотим запомнить, что именно это за символы, окружая их скобками, затем идет точка («\.») (экранируем точку, потому что одиночная точка — это просто любой символ), затем символы «msl» и на этом строка заканчивается («$»), то заменим исходный URL на следующий: возьмем первую запомненную подстроку в скобках из правила, прибавим к ней «.php», добавим все дополнительные параметры адреса, которые могли быть «[QSA]» и на этом закончим, не будем применять дальнейшие преобразования, если они есть «[L]»
Все, теперь Вы можете смело менять все ссылки, заканчивающиеся на «.php» на «.msl» и писать в своем блоге, что изобрели новый скриптовый язык. Apache, встретив ссылку на «index.msl» с помощью mod_rewrite на лету преобразует ее в «index.php» и вызовет нужный скрипт.
А что еще умеет mod_rewrite?
О, этот модуль умеет многое. Лично я жду, когда же кто-нибудь достаточно продвинутый в магии и PCRE напишет «Морской бой» на mod_rewrite.
Но пока этого не случилось, покажу еще несколько вариантов использования этого замечательного модуля.
Предположим, что Вы решили написать движок для блогов. Каждый пользователь будет иметь возможность создать свой блог, выбрать для него имя, писать в свой блог и читать чужие записи.
Первичная фильтрация данных
Предположим, что адреса пользовательских блогов будут иметь вид «/blogs/ABC/», а скрипт, который будет показывать ленту записей определенного блога, будет называться «viewblog.php».
Несложное правило mod_rewirte позволит нам отсеять некорректные имена блогов, которые могут использовать злоумышленники:
RewriteRule blogs/([a-z0-9_-]+)([\/]<0,1>)$ viewblog.php?blogname=$1 [L]
RewriteRule viewblog.php — [F]
В квадратных скобках, в соответствии с синтаксисом PCRE, мы задаем класс символов, включая в него цифры, буквы латинского алфавита, минус и знак подчеркивания. Все адреса, в которых будут какие-то другие символы, не пройдут проверку этим правилом и приведут к ошибке 404. Флаг [L] необходим, чтобы движок mod_rewrite, успешно сделав преобразование, не пошел далее, на второе правило. Этот флаг аналогичен оператору break внутри цикла.
Второе правило не задает напрямую преобразование адреса (символ «-«), а запрещает прямой доступ к скрипту viewblog.php (флаг «[F]»), тем самым закрывая злодеям возможность передать в параметрах что-то вредоносное.
Кстати:
Хорошим тоном будет начинать Ваши правила со строчки
RewriteRule .htaccess — [F]
Это запретит доступ к файлу .htaccess в случае дурно настроенного хостинга.
Использование для кэширования в ФС
Предположим, что Ваш проект растет. Хостинг перестает справляться с нагрузками — сотни блоггеров, десятки тысяч просмотров их блогов, да еще и комментарии…
И тут mod_rewrite может придти на помощь, если по каким-то причинам Вы не хотите переходить на свой сервер.
Во-первых, модифицируйте свой скрипт viewblog.php таким образом, чтобы при обращении к нему он не только выдавал сформированную страницу в браузер, но и записывал ее в файловую систему по адресу /blogs/ABC.html
Проще всего это сделать, использовав функции управления буферизацией. Предположим, что исходный код скрипта viewblog.php выглядит у Вас примерно так:
Применим буферизацию вывода и запишем вывод в файл.
Теперь остается только немного модифицировать Ваши правила в .htaccess, чтобы получить полноценную систему кэширования контента:
RewriteRule blogs\/([a-z0-9_-]+)([\/]<0,1>)$ blogs\/$1\.html
RewriteCond %
RewriteCond %
RewriteRule (.*) viewblog.php?blogname=%1
В первой строке мы преобразуем URL вида blogs/ABC/ в blogs/ABC.html, таким образом перенаправляя Apache на сгенерированный нами файл кэша страницы.
Следующие три строки представляют собой одно большое правило. Если идет запрос на blogs/ABC.html и при этом в файловой системе нет такого файла — запрос перенаправляется на скрипт viewblog.php
Таким образом нам остается только предусмотреть систему своевременной очистки кэша и задача решена.
Другие применения
Лично я использую модуль mod_rewrite аналогично последнему примеру для генерации и хранения в ФС превью изображений.
Очень легко с помощью mod_rewrite делается отображение поддоменов на папки, например forum.localhost.localdomain физически будет находиться в localhost.localdomain/forum, что часто бывает проще для разработчика приложения.
Незаменим mod_rewrite для ограничения скачивания файлов на файловом хостинге или в магазине цифровых товаров (придется задействовать механизм символических ссылок) или для запрета хотлинкинга (через проверку реферера).
А вообще — это Вуду 🙂
Чертовски интересное Вуду, позволяющее каждый день открывать новые стороны и применения.