Полное руководство по mod_rewrite


Структура этого руководства

Руководство построено следующим образом:

  • важная теория, которая часто применяется при работе с mod_rewrite (главы с 1 по 4);
  • практические примеры, готовые решения для популярных задач (главы 5 и 6);
  • теория mod_rewrite, которая не является ключевой. Сюда отнесены редко применяемые директивы и детальное описание процесса перезаписи (главы с 7 по 9).

Оглавление

1. Как включить и как работает mod_rewrite

1.1 Что такое mod_rewrite

1.2 Для чего нужен mod_rewrite / Что умеет mod_rewrite

1.3 Включение mod_rewrite

1.4 Журнал (логи) преобразований mod_rewrite

1.5 Директивы RewriteEngine и RewriteRule

1.6 Шаблон RewriteRule

1.7 Какая часть запроса проверяется на совпадение с Шаблоном?

1.8 Подстановка RewriteRule

1.9 Директива RewriteBase

1.10 Логика работы mod_rewrite

1.11 Тестирование правил mod_rewrite

2. Регулярные выражения mod_rewrite

2.1 Совпадение буквальной строки

2.2 Один любой символ

2.3 Повторения

2.4 Анкоры (начало и конец строки)

2.5 Группировка (последовательность из нескольких заданных символов)

2.6 Обратные ссылки (подстановка найденного значения)

2.7 Класс символов (любой из перечисленных символов)

2.8 Количество повторений

2.9 ИЛИ (альтернатива)

2.10 НЕ (противоположность)

3. Флаги RewriteRule

3.1 F|Forbidden – Запрет доступа, возвращает браузеру клиента ответ 403 FORBIDDEN

3.2 NC|nocase – Выполнять сравнение без учёта регистра

3.3 R|redirect – Выполнить редирект (перенаправление)

3.4 L|last – Последнее правило (остановка текущего цикла)

3.5 END – Немедленная остановка процесса перезаписи

3.6 H|handler – Отправка результирующего URI указанному Content-handler для обработки

3.7 C|chain – Составление цепи из правил

3.8 N|next – Перезапуск процесс перезаписи начиная с первого правила

3.9 QSA|qsappend – Добавить строку запроса из исходного URL к строке запроса, созданной правилами перезаписи

3.10 QSD|qsdiscard – Отбросить любую строку запроса из входящего URI

3.11 QSL|qslast – Сделать разделителем строки самый правый знак вопроса

3.12 NE|noescape – Не экранировать специальные символы в результатах

3.13 NS|nosubreq – Пропуск правила, если текущий запрос является внутренним подзапросом

3.14 S|skip – Пропустить следующее количество правил, если сработало текущее правило

3.15 T|type – Принудительная установка MIME-типа целевого файла на указанный тип

3.16 B (экранировать обратные ссылки) – Экранировать не-буквенно-цифровые символы в обратных ссылках перед применения трансформации

3.17 BNP|backrefnoplus (не экранировать пробелы на +) – Если обратные ссылки будут экранированы, пробелы должны быть экранированы в %20 вместо +

3.18 CO|cookie – Устанавливает куки в клиентский браузер

3.19 DPI|discardpath – Приводит к отбрасыванию части PATH_INFO переписанного URI

3.20 E|env – Устанавливает или удаляет значение переменной окружения

3.21 G|gone – Возвращает клиентскому браузеру ответ 410 GONE

3.22 P|proxy – Заставляет URL-адрес подстановки быть внутренне отправленным в качестве прокси-запроса

3.23 PT|passthrough – Заставляет результирующий URI быть переданным обратно в механизм сопоставления URL-адресов для обработки другими URI-на-имя_файла трансляторами, таких как Alias или Redirect

4. Директива RewriteCond

4.1 Функции и синтаксис RewriteCond

4.2 Строка тестирования RewriteCond

4.3 ​Шаблон условия RewriteCond

4.4 Флаги RewriteCond

4.5 Пример

5. Частые случаи и примеры использования mod_rewrite

5.1 Проверка доступности mod_rewrite

5.1.1 Как включить RewriteEngine

5.1.2 Как проверить, включён ли mod_rewrite

5.1.3 Как сделать так, чтобы правила перезаписи использовались только если mod_rewrite включен

5.2 Использование mod_rewrite для перенаправления (редиректа) и переназначения URL

5.2.1 Страница поменяла адрес, как показать новую страницу по старому адресу без редиректа

5.2.2 Страница поменяла адрес, как перенаправить на новую страницу при запросе старой (редирект)

5.2.3 Переадресация при смене домена

5.2.4 Простой редирект на новый сайт

5.2.5 Как переправить все запросы из одной директории, в другую

5.2.6 Использовать URL адресов без расширения файлов .php

5.2.7 Универсальный документ ошибки (Error Document) для не найденных ресурсов (ошибка 404 Not Found)

5.2.8 Со статики на динамику

5.2.9 Обратная совместимость для изменений расширения файла

5.2.10 Замена на WebP изображения

5.3 Канонические имена хостов и URL. HTTPS

5.3.1 Как сделать редирект с HTTP на HTTPS

5.3.2 Как сделать редирект на с HTTP на HTTPS всех страниц кроме некоторых

5.3.3 Как сделать редирект на с HTTP на HTTPS только некоторых страниц

5.3.4 Принудительное использование HTTPS за прокси

5.3.5 Всегда использовать WWW перед именем домена

5.3.6 Всегда использовать WWW перед именем домена – универсальный вариант

5.3.7 Никогда не использовать WWW перед именем домена

5.3.8 Никогда не использовать WWW перед именем домена – универсальный вариант

5.3.9 Принудительное использование канонического имени с HTTPS и www

5.3.10 Канонический вид с HTTPS и без www

5.3.11 Принудительное SSL и www для главного домена, принудительное SSL без www для всех поддоменов (кроме локальных)

5.3.12 Принудительное добавление конечного слеша к адресу сайта

5.3.13 Удаление конечного слеша

5.3.14 Удаление лишних слешей в адресе URL

5.4 Контроль доступа и блокировка хотлинка

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

5.4.2 Запрет доступа к скрытым файлам и директориям

5.4.3 Запрет хотлинка изображений

5.4.4 Запрет хотлинкинга только для определённых доменов

5.4.5 Разрешение хотлинка для определённых сайтов

5.4.6 Блокировка пользователя по рефереру (Referrer)

5.4.7 Блокировка плохих ботов, клонеров сайтов, офлайн браузеров

5.4.8 Запрет доступа к файлу или директории в определённые периоды времени

5.4.9 Запрет доступа с пустым реферером (Referer)

5.4.10 Блокировка доступа по части пользовательского агента (User Agent)

5.4.11 Как заблокировать доступ по точному совпадению User Agent

5.4.12 Запрет доступа к определённым страницам

5.4.13 Запрет доступа IP и диапазонам

5.4.14 Комбинирование правил контроля доступа

5.4.15 Как фильтровать по строке запроса, идущей после знака вопроса

5.5 Обработка строки параметров URI в mod_rewrite

5.5.1 Запросы: request и query

5.5.2 Как в mod_rewrite искать по параметрам после знака вопроса

5.5.3 Как с mod_rewrite удалить параметр из URI

5.5.4 Как удалить часть строки запроса после знака вопроса

5.5.5 mod_rewrite: отрицание в строке запроса %{QUERY_STRING}

5.5.6 Как в mod_rewrite переписать строку запроса

5.5.7 Ошибка ERR_TOO_MANY_REDIRECTS при удалении строки запроса. Как использовать флаг QSD для удаления строки запроса

5.6 Перенаправление портов

5.6.1 Как перенаправить запросы на 80-й порт

5.6.2 Как перенаправить запросы на 443-й порт

5.6.3 Как перенаправить запросы на 80-й порт кроме некоторых страниц

5.7 Как в mod_rewrite читать параметры POST

6. Продвинутые техники

6.1 Поиск страниц в нескольких папках

6.2 Перенаправление на географически распределенные серверы

6.3 Показ содержимого в зависимости от браузера

6.4 Перемещенный DocumentRoot

6.5 Вспомогательный ресурс

6.6 Распределение URL-адресов по нескольким серверам

6.7 Генерация контента на лету

6.8 Балансировка нагрузки

6.9 Структурированные Userdirs

6.10 Перенаправление анкеров

6.11 Зависимая от времени перезапись

6.12 Установка переменных среды на основе URL-адресов

6.13 Динамические массовые виртуальные хосты с mod_rewrite

6.13.1 Виртуальные хосты для произвольных имён хостов

6.13.2 Динамические виртуальные хосты с помощью mod_rewrite

6.13.3 Использование отдельного файла конфигурации виртуального хоста

6.14 Использование mod_rewrite для проксирования

7. Директива RewriteMap

7.1 Что такое RewriteMap, как использовать RewriteMap

7.2 Контекст директорий и .htaccess

7.3 Типы карты RewriteMap

7.3.1 int: Внутренняя функция

7.3.2 txt: Простые текстовые карты

7.3.3 rnd: Рандомизированный обычный текст

7.3.4 dbm: хеш файл DBH

7.3.5 prg: Внешняя программа перезаписи

7.3.6 dbd или fastdbd: SQL Query

7.4 Резюме

8. Директива RewriteOptions, технические подробности, когда НЕ использовать mod_rewrite


Рекомендуется Вам:

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

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