Полное руководство по 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 Запрет доступа к файлу или директории в определённые периоды времени

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

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

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

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

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

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

6.6 Переписать строку запроса

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

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

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

Ваш e-mail не будет опубликован.