Инструкция по работе с модулем Apache Rewrite
Хорошее понимание работы механизма перенаправления URL исключительно важно для любого мало-мальски сложного web-приложения. Я уже писал о механизме перенаправления здесь. Сегодня мы поговорим более подробно на эту тему.
Правила перенаправления являются важнейшими элементами почти любого web ориентированного приложения. Это стандарт де-факто. Эти правила служат двум главным целям:
- Создание ЧПУ
- Сокрытие внутреннего устройства сайта, в целях безопасности
Правила перенаправления часто используются для маскировки сложных URL адресов в целях SEO оптимизации и для того, чтобы сделать URL легче для восприятия. Взгляните на пример ниже.
- https://myrusakov.ru/article.php?id=1057
- https://myrusakov.ru/apache-rewrite-engine-guide.html
Согласитесь, что читать второй URL легче. Также благодаря такому URL улучшается SEO, так как в этом адресе содержится и ключевой запрос, который может быть проиндексирован поисковиком. Другой плюс заключается в том, что скрывается технология, на которой сделан сайт, что увеличивает безопасность.
Инструкция RewriteRule
Инструкция RewriteRule определяет правила перенаправления. У нее следующий синтаксис:
RewriteRule Шаблон Подстановка [Флаги]
где шаблон – это регулярное выражение, подстановка - строк, которую мы получим после замены, флаги – опциональные параметры, задающие дополнительные условия
Пример (файл .htaccess):
RewriteEngine On
RewriteRule ^([0-9]{4})/([0-9]{0,2})/$ /article.php?y=$1&m=$2 [S]
RewriteRule ^view\.php – [F]
Каждая строка называется инструкцией или директивой. Первая строка включает режим перенаправления, она всегда должна присутствовать, если вы хотите использовать модуль Apache Rewrite Engine. Вторая строка создает соответствие между URL адресом и шаблоном регулярного выражения. О регулярных выражениях я писал здесь. В данной серии статей очень подробно рассказывается о том, что такое регулярные выражения и как их применять в PHP. Поэтому без хорошего понимания регулярных выражений, вам трудно будет освоить Rewrite Engine. На третьей строке, если наш запрос не соответствует регулярному выражению, то мы перенаправляем пользователя на скрипт view.php, с кодом 403 и статусом Forbidden Response (Нет достаточно прав для просмотра страницы). [S] и [F] – флаги, далее показывается, что они означают.
Список флагов .htaccess
Всего флагов 15 штук в общем. Флаги могут быть добавлены в конец правила перенапрвления с целью изменения поведения сервера Apache.
Redirect R
Этот флаг используется для того, чтобы перенаправить URL. Код статуса по умолчанию 302 (Найден). Вы можете поменять код статуса на, например, 301 (Временно перемещен) используя флаг с параметром [R=301]
Forbidden F
Немедленно завершает обработку запроса и возвращает статус 403 (Запрет просмотра)
Gone G
Возвращает код 401, что означает, что запрошенный файл больше не существует
Proxy P
Прокси запрос, обрабатываемый другим модулем
Last L
После данного флага обработка всех последующих перенаправлении останавливается
Next N
Заставляет начать обработку запроса по новой, используя результаты предыдущего запроса
Chain C
Заставляет перейти к следующему правилу
NoSubreq NS
Пропускает запрос, если он является внутренним подзапросом и не является прямым запросом от пользователя
NoCase NC
Нечувствительность к регистру символов
QSAppend QSA
Добавляет к запросу все данные после знака ?. Пример: запрос myrusakov.ru/user/?name=Aleksei преобразуется в myrusakov.ru/user.php?name=Aleksei. Если же флаг отсутствует то получим просто myrusakov.ru/user.php
NoEscape NE
Не экранировать URL, в противном случае все символы наподобие % и $ будут заменены их шестнадцатеричными эквивалентами.
Passthrough PT
Передает обработку запроса другим модулям Apache
Skip S
Флаг S используется для перехода к следующему правилу, если есть соответствие текущему правилу. Можно пропустить несколько правил, указав число. Например: [S=3]
Env E
Используется для установки переменной окружения
Type T
Устанавливает MIME тип ответа
Разрешается использовать несколько флагов для правила, например, [L, QSA]
Список условных правил
С помощью использования инструкции RewriteCond можно сделать правила перенаправления, зависящими от некоторых условий. Вместо использования синтаксиса RewriteRule с его регулярными выражениями, вы можете использовать условные правила. Далее представлен список условных правил, которые могут быть использованы в файле конфигураций .htaccess:
HTTP Заголовки
- HTTP_HOST
- HTTP_REFERER
- HTTP_COOKIE
- HTTP_FORWARDED
- HTTP_USER_AGENT
- HTTP_PROXY_CONNECTION
- HTTP_ACCEPT
Запросы
- REMOTE_IDENT
- REMOTE_HOST
- REMOTE_USER
- REMOTE_ADDR
- REQUEST_METHOD
- SCRIPT_FILENAME
- PATH_INFO
- QUERY_STRING
- AUTH_TYPE
Внутренние переменные
- DOCUMENT_ROOT
- SERVER_ADMIN
- SERVER_ADDR
- SERVER_NAME
- SERVER_PORT
- SERVER_PROTOCOL
- SERVER_SOFTWARE
- API_VERSION
- THE_REQUEST
- REQUEST_URI
- REQUEST_FILENAME
- IS_SUBREQ
Дата и время
- TIME_YEAR
- TIME_MON
- TIME_WDAY
- TIME_HOUR
- TIME_MIN
- TIME_SEC
- TIME_DAY
- TIME
-
- Михаил Русаков
Комментарии (5):
спасибо за статью, жаль что без единого примера, как и прочие 99% статей в интернете. Самое интересное в .htacces - это регулярки, подробные инструкции к которым отсутствуют. Сделайте статью по регулярках htaccess - многие спасибо скажут.
Ответить
Спасибо, за Ваш комментраий! Сделаем. Только поясните, пожалуйста, что Вы имеете ввиду про "регулярки htaccess"?
Ответить
имелось в виду - составление регулярных выражений в htaccess Желательно полный список правил регулярных выражений которые можно использовать Вот список моих правил регулярных выражений собранный с огромного количества источников. https://info.za500.biz/programmirovanie/item/regulyarnye-vyrazheniya-manual Можете по аналогии составить мануал регулярок htaccess
Ответить
Понятно. Обязательно напишу статью про примеры регулярных выражений, которые могут использоваться в htaccess. А не могли бы Вы еще сказать статьи по каким темам Вам хотелось бы увидеть на сайте?
Ответить
############################## 1.запросы в базу данных. Пройдя оба курса PHP c 0 до гуру и PHP 2.0, в обоих курсах совсем мизер информации по запросах и 0 информации про сложные запросы. Вот что я смог нарыть по крупице с интернета: https://info.za500.biz/programmirovanie/item/manual-po-zaprosah-mysql ############################## 2. PHP yaild - оооооочень кратко описан данный генератор, хотелось бы по больше информации о нем узнать, 2-х мерные массивы, хранение результатов запросов с базы данных и т д. ############################## 3. JS - в вашем в курсе по JS - отсутствует информация о работе со свойствами объектов, единственное что рассматривается, так это замета текста в блоке. отсутствует информация создания анимации на JS. отсутствуют примеры добавления к присвоенным стилям элементам html новых стилей через JS, замена стилей CSS с использованием JS. ############################## 4. правила написания регулярных выражений в JS, желательно полный список правил. ############################## 5. хотелось бы увидеть полный курс по CSS а не демо версию мах 30% всех свойств - это я намекаю на создание нового курса, который будет охватывать все стили CSS, желательно с указанием совместимости стилей с разными браузерами. Правила префиксов для всех браузеров. ############################## 6. или статьи или курс, по правилах правильного моделирования структуры базы данных, как правильно составлять связи между таблицами, основные модели реализации структуры базы данных. Хотя бы описать золотые правила составления структуры и связей в базе данных. ############################## 7. PHP - синтаксис работы с разными типами баз данных. ############################## 8. добавить на Ваш форум скрипт автоматического редиректа клонов материалов https://info.za500.biz/programmirovanie/joomla/item/udalyaem-klony-stranichek-c-redirektom-url правда в нем не хватает редиректа куков #erfxfxwfs и можно сказать что любой сайт на любой CMS будет без единого клона. 9. CSS - создание анимации, трансформирование и т д.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.