Полное руководство по mod_rewrite
Структура этого руководства
Руководство построено следующим образом:
- важная теория, которая часто применяется при работе с mod_rewrite (главы с 1 по 4);
- практические примеры, готовые решения для популярных задач (главы 5 и 6);
- теория mod_rewrite, которая не является ключевой. Сюда отнесены редко применяемые директивы и детальное описание процесса перезаписи (главы с 7 по 9).
Оглавление
1. Как включить и как работает mod_rewrite
1.2 Для чего нужен mod_rewrite / Что умеет mod_rewrite
1.4 Журнал (логи) преобразований mod_rewrite
1.5 Директивы RewriteEngine и RewriteRule
1.7 Какая часть запроса проверяется на совпадение с Шаблоном?
1.10 Логика работы mod_rewrite
1.11 Тестирование правил mod_rewrite
2. Регулярные выражения mod_rewrite
2.1 Совпадение буквальной строки
2.4 Анкоры (начало и конец строки)
2.5 Группировка (последовательность из нескольких заданных символов)
2.6 Обратные ссылки (подстановка найденного значения)
2.7 Класс символов (любой из перечисленных символов)
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.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.18 CO|cookie – Устанавливает куки в клиентский браузер
3.19 DPI|discardpath – Приводит к отбрасыванию части PATH_INFO переписанного URI
3.20 E|env – Устанавливает или удаляет значение переменной окружения
3.21 G|gone – Возвращает клиентскому браузеру ответ 410 GONE
4. Директива RewriteCond
4.1 Функции и синтаксис RewriteCond
4.2 Строка тестирования RewriteCond
4.3 Шаблон условия RewriteCond
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.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.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.6.1 Как перенаправить запросы на 80-й порт
5.6.2 Как перенаправить запросы на 443-й порт
5.6.3 Как перенаправить запросы на 80-й порт кроме некоторых страниц
5.7 Как в mod_rewrite читать параметры POST
6. Продвинутые техники
6.1 Поиск страниц в нескольких папках
6.2 Перенаправление на географически распределенные серверы
6.3 Показ содержимого в зависимости от браузера
6.6 Распределение URL-адресов по нескольким серверам
6.7 Генерация контента на лету
6.9 Структурированные Userdirs
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.2 txt: Простые текстовые карты
7.3.3 rnd: Рандомизированный обычный текст
7.3.5 prg: Внешняя программа перезаписи
7.3.6 dbd или fastdbd: SQL Query
8. Директива RewriteOptions, технические подробности, когда НЕ использовать mod_rewrite
Связанные статьи:
- Логи Apache: настройка и анализ (66.4%)
- Самостоятельная настройка VDS / VPS (56.6%)
- Полное руководство по mod_rewrite (часть 1): Как включить и как работает mod_rewrite (54.3%)
- Полное руководство по mod_rewrite (часть 2): Регулярные выражения (54.3%)
- Полное руководство по mod_rewrite (часть 3): Флаги RewriteRule (54.3%)
- Препарирование скамерского сайта (КЕЙС) (RANDOM - 3.1%)