Переадресация внутри сайта с помощью .htaccess
🏠 | 💻 PC | Web |
Введение | |
Как сделать переадресацию | |
Как сделать несколько редиректов | |
Решение проблем |
Введение
Прежде, чем заниматься переадресацией, нужно выяснить тип сервера, на котором
размещён Ваш сайт.
Файл .htaccess вносит изменения в работу сервера Apache
В Nginx похожой цели служит файл nginx.conf суть там та же, но синтаксис немного другой.
Простая постоянная переадресация 301
Чтобы перенестри страницу с одного адреса на другой на постоянной основе вносите в .htaccess следующие изменения:
RewriteEngine on
Redirect 301 old_url http://адрес_новой_страницы
Где old_url это адрес_старой_страницы_относительно_корня_сайта
Если ваш сервер это Apache, a файла .htaccess у Вас нет, можете создать его самостоятельно и поместить, например, в корневую директорию.
Пример
RewriteEngine on
Redirect 301 /old_dir/url1.php /new_dir/url1.php
Redirect 301 /old_url1.php /new_url.php
Redirect 301 /old_url2.
php /new_dir/new_url.php
Можно сделать переадресацию целой директории
RewriteEngine on
Redirect 301 /old_dir /new_dir
Два редиректа
Если вы делаете два редиректа, которые влияют на какую-то страницу, например перенаправляете целую директорию, и ещё дополнительно что-то меняете внутри — нужно делать это аккуратно
Допустим было:
/old_dir/a.php
/old_dir/b.php
/old_dir/page.php
А теперь нужно:
/new_dir/a.php
/new_dir/b.php
/new_dir/new_page.php
Для переадресации
Redirect 301 /old_dir /new_dir
А вот чтобы правильно перенаправить с.php в new_page. php нужно мысленно представить, куда перенаправится старый с.php с учётом нашего редиректа Redirect 301 /old_dir /new_dir
Как вы наверное и сами догадались, перенаправится он из
/old_dir/page.php
в
/new_dir/page.php
И уже вот этот несуществующий /new_dir/page.php нам нужно перенаправить в
/new_dir/new_page.php
Поэтому правило будет выглядеть следующим образом
Redirect 301 /old_dir /new_dir
Redirect 301 /new_dir/page.php /new_dir/new_page.php
Дебаг
Если у вас возникли какие-то проблемы с переадресацией, первое что советую сделать — зайти на хостинг и почтитать логи.
У хостинга
Beget
которым я пользуюсь, и вам могу порекомендовать — логи с ошибками
доступа лежат в файле sitename. xx.error.log
Когда я хочу проверить, что не так — я логинюсь на хостинг по ssh захожу к себе в public_html и делаю
tail -n 100 andreyolegovich.ru.error.log
Так я вижу последние 100 строк сегодняшнего лога. И если бы там было
… script ‘/home/xxx/andreyolegovich.ru/public_html/new_dir/page.php’ not found or unable to start, referer heihei.ru
Я бы понял, что не настроена переадресация со старого
Redirect 301 /new_dir/page.php /new_dir/new_page.php
В .htaccess
Подробнее про работу с логами читайте в моей статье про тестирование
Также советую изучить команды Bash
Роботы:
207.46.13.56 bing
Похожие статьи:
🛠 | Полезные советы | |
🖽 | Html | |
🖌 | CSS | |
Joomla | ||
UTM-метки | ||
URLencode | ||
↬ | Переадресация страниц сайта | |
↔ | Адаптивный дизайн сайтов | |
Настройка почтового ящика на Яндекс | ||
Какой хостинг выбрать | ||
Как перенести сайт | ||
Яндекс Метрика | ||
Разница между POST и PUT | ||
Word Press | ||
SEO | ||
Тестирование сайта | ||
A numeric character reference expanded to the C1 controls range.![]() | ||
JavaScript | ||
.webp | ||
Flask | ||
Django | ||
Как указать каноническую страницу сайта |
- Поиск по сайту
- aofeed — Telegram канал чтобы следить за выходом новых статей
- aofeedchat — задать вопрос в Телеграм-группе
Рекомендую наш хостинг beget.ru |
Пишите на info@urn.su если Вы: |
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.![]() |
2. Хотите разместить на сайте рекламу, подходящуюю по тематике. |
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение — пожалуйста свяжитесь с нами по электронной почте |
4. Нашли на сайте ошибку, неточности, баг и т.д. … ……. |
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: |
Переадресация внутри сайта с помощью .htaccess
🏠 | 💻 PC | Web |
Introduction | |
Как сделать переадресацию | |
Как сделать несколько редиректов | |
Решение проблем |
Introduction
Прежде, чем заниматься переадресацией, нужно выяснить тип сервера, на котором
размещён Ваш сайт.
Файл .htaccess вносит изменения в работу сервера Apache
В Nginx похожой цели служит файл nginx.conf суть там та же, но синтаксис немного другой.
Простая постоянная переадресация 301
To перенестри страницу с одного адреса на другой на постоянной основе вносите в .htaccess
RewriteEngine on
Redirect 301 old_url http://адрес_новой_страницы
Где old_url это адрес_старой_страницы_относительно_корня_сайта
Если ваш сервер это Apache, a файла .htaccess у Вас нет, можете создать его самостоятельно и поместить, например, в корневую директорию.
Пример
RewriteEngine on
Redirect 301 /old_dir/url1.php /new_dir/url1.php
Redirect 301 /old_url1.php /new_url.php
Redirect 301 /old_url2.
php /new_dir/new_url.php
Можно сделать переадресацию целой директории
RewriteEngine on
Redirect 301 /old_dir /new_dir
Два редиректа
Если вы делаете два редиректа, которые влияют на какую-то страницу, например перенаправляете целую директорию, и ещё дополнительно что-то меняете внутри — нужно делать это аккуратно
Допустим было:
/old_dir/a.php
/old_dir/b.php
/old_dir/c.php
А теперь нужно:
/new_dir/a.php
/new_dir/b.php
/new_dir/new_c.php
Для переадресации a.php и b.php достаточно создать правило
Redirect 301 /old_dir /new_dir
А вот чтобы правильно перенаправить с.php в new_c. php нужно мысленно представить, куда перенаправится старый с.php с учётом нашего редиректа Redirect 301 /old_dir /new_dir
Как вы наверное и сами догадались, перенаправится он из
/old_dir/c.php
в
/new_dir/c.php
И уже вот этот несуществующий /new_dir/c.php нам нужно перенаправить в
/new_dir/new_c.php
Поэтому правило будет выглядеть следующим образом
Redirect 301 /old_dir /new_dir
Redirect 301 /new_dir/c.php /new_dir/new_c.php
Дебаг
Если у вас возникли какие-то проблемы с переадресацией, первое что советую сделать — зайти на хостинг и почтитать логи.
У хостинга
Beget
которым я пользуюсь, и вам могу порекомендовать — логи с ошибками
доступа лежат в файле sitename. xx.error.log
Когда я хочу проверить, что не так — я логинюсь на хостинг по ssh захожу к себе в public_html и делаю
tail -n 100 aredel.com.error.log
Так я вижу последние 100 строк сегодняшнего лога. И если бы там было
… script ‘/home/xxx/aredel.com/public_html/new_dir/c.php’ not found or unable to start, referer heihei.ru
Я бы понял, что не настроена переадресация со старого c.php на новый new_c.php и добавил бы строку
Redirect 301 /new_dir/c.php /new_dir/new_c.php
В .htaccess
Подробнее про работу с логами читайте в моей статье про тестирование
Также советую изучить команды Bash
Роботы:
207.46.13.56 bing
Related Articles:
🛠 | Полезные советы | |
🖽 | Html | |
🖌 | CSS | |
Joomla | ||
UTM-метки | ||
URLencode | ||
↬ | Переадресация страниц сайта | |
↔ | Адаптивный дизайн сайтов | |
Настройка почтового ящика на Яндекс | ||
Какой хостинг выбрать | ||
Как перенести сайт | ||
Яндекс Метрика | ||
Разница между POST и PUT | ||
Word Press | ||
SEO | ||
Тестирование сайта | ||
A numeric character reference expanded to the C1 controls range.![]() | ||
JavaScript | ||
.webp | ||
Flask | ||
Django | ||
Как указать каноническую страницу сайта |
- Search on this website
- aofeed — Telegram channel for updates
- aofeedchat — Telegram group for questions
Share in social media: |
Вход пользователей в ваше веб-приложение с использованием модели перенаправления
Добавьте аутентификацию с помощью модели перенаправления Okta (открывается в новом окне) в ваше серверное веб-приложение. В этом примере в качестве пользовательского хранилища используется Okta.
Результаты обучения
- Создайте интеграцию, которая представляет ваше приложение в вашей организации Okta.
- Добавьте зависимости и настройте приложение для использования проверки подлинности с перенаправлением Okta.
- Проверка входа пользователя в поток.
Пример кода
Пример приложения Quickstart (откроется в новом окне)
Примечание . Для одностраничных (браузерных) приложений см. раздел Вход пользователей в SPA с использованием модели перенаправления. Информацию о серверах, возвращающих ответы API, отличные от HTML, см. в статье Защита конечных точек API.
Настройка Okta
Настройка Okta org. CLI — это самый быстрый способ работы с вашей организацией Okta, поэтому мы рекомендуем использовать его для первых нескольких шагов. Если вы не хотите устанавливать CLI, вы можете вместо этого вручную зарегистрироваться в организации (открывается в новом окне). Мы предоставляем инструкции без CLI вместе с приведенными ниже шагами CLI.
Установите интерфейс командной строки Okta: Okta CLI (откроется в новом окне).
Если у вас еще нет бесплатной учетной записи разработчика Okta, создайте ее, введя
okta register
в командной строке.Запишите домен Okta, так как он понадобится вам позже.
ВАЖНО: Установите пароль для вашей организации разработчиков Okta, открыв ссылку, которая отображается после регистрации вашего домена. Найдите вывод, похожий на этот:
Примечание : Если вы не получили электронное письмо с подтверждением, отправленное в процессе создания, проверьте фильтры спама на наличие письма с адреса
noreply@okta.com
.Подключитесь к своей организации разработчиков Okta, если вы не создали ее на последнем шаге (успешное создание организации Okta также выполняет вход), выполнив следующую команду.
Вам нужен URL-адрес вашей организации — это ваш домен Okta с
https://
в начале — и токен API/доступа.
Создайте интеграцию с Okta для вашего приложения
Интеграция с приложением представляет ваше приложение в вашей организации Okta. Интеграция настраивает, как ваше приложение интегрируется со службами Okta, включая: какие пользователи и группы имеют доступ, политики аутентификации, требования к обновлению токена, URL-адреса перенаправления и многое другое. Интеграция включает информацию о конфигурации, необходимую приложению для доступа к Okta.
Чтобы создать интеграцию вашего приложения в Okta с помощью CLI:
Создайте интеграцию приложения, выполнив:
Введите Quickstart при запросе имени приложения.
Укажите необходимые значения URI перенаправления:
- REDIRECT URI :
http: // localhost: 8080/wordization-code/callback
- .
файл
.okta.env
с операторами экспорта, содержащими идентификатор клиента, секрет клиента и издателя. Сохраните это в безопасном месте, поскольку вы будете использовать его позже для настройки своего веб-приложения.
- REDIRECT URI :
На этом этапе вы можете перейти к следующему шагу: Создание приложения. Если вы хотите настроить интеграцию вручную или узнать, что CLI только что сделал для вас, читайте дальше.
- Войдите в свою организацию Okta (открывается в новом окне) под учетной записью администратора.
- Нажмите кнопку Admin в правом верхнем углу страницы.
- Откройте панель конфигурации приложений, выбрав Приложения > Приложения .
- Нажмите Создать интеграцию приложений .
- Выберите метод входа из OIDC — OpenID Connect , затем нажмите Далее .
- Выберите тип приложения из веб-приложения , затем нажмите Далее .
Примечание. Если вы выберете неподходящий тип приложения, оно может нарушить потоки входа или выхода, потребовав проверки секрета клиента, чего нет у общедоступных клиентов.
- Введите имя интеграции приложения .
- Введите URI перенаправления входа для локальной разработки, например
http://localhost:xxxx/authorization-code/callback
. - Введите URI перенаправления выхода для обеих локальных разработок, например
http://localhost:xxxx/signout/callback
. Дополнительные сведения об URI обратного вызова см. в разделе Определение маршрута обратного вызова. - В разделе Назначения определите тип Контролируемый доступ для вашего приложения. Выберите группу Everyone . Дополнительную информацию см. в разделе Назначение интеграций приложений (открывается в новом окне) в документации по продукту Okta.
- Щелкните Сохранить , чтобы создать интеграцию приложения. Панель конфигурации для интеграции открывается после ее сохранения. Держите эту панель открытой, когда копируете некоторые значения при настройке приложения.
Создать приложение
В этом разделе вы создадите образец веб-приложения и добавите проверку подлинности с перенаправлением, используя интеграцию нового приложения.
Создать новый проект
Убедитесь, что на вашем компьютере установлена среда разработки PHP.
Создайте каталог с именем
public
для размещения файлов вашего проекта.Создайте внутри него пустой файл с именем
index.php
.
Примечание : Это руководство было написано с использованием PHP 7.4.
Добавьте пакеты
Добавьте необходимые зависимости для использования Okta SDK с вашим веб-приложением.
Установите библиотеку phpdotenv
для управления файлом конфигурации для этого проекта. Например, если вы используете композитор, вы можете запустить эту команду:
Настройте свое приложение
Наше приложение использует информацию из интеграции Okta, которую мы создали ранее, для настройки связи с API: идентификатор клиента, секрет клиента и эмитент.
Если вы используете интерфейс командной строки Okta для создания интеграции приложения okta, он создает файл .okta.env
в вашем текущем каталоге, содержащий эти значения.
Сделайте копию
.okta.env
с именем.env
внутри корня вашего проекта.Удалите ключевые слова
export
, чтобы конфигурация могла использоваться библиотекойphpdotenv
. Это должно выглядеть так:Настройте базовый маршрутизатор и загрузите переменные среды, добавив следующий код в файл index.php :
Найдите значения конфигурации
Если у вас нет под рукой значений конфигурации, вы можете найти их в консоли администратора (выберите Приложения > Приложения и найдите созданную ранее интеграцию приложений):
Идентификатор клиента : найдено на вкладке Общие в разделе Учетные данные клиента .
Секрет клиента : находится на вкладке Общие в разделе Учетные данные клиента .
Домен Okta : находится в глобальном заголовке, расположенном в правом верхнем углу панели управления. Нажмите стрелку вниз рядом с вашим адресом электронной почты и в появившемся раскрывающемся списке наведите указатель на доменное имя. Щелкните появившийся значок Копировать в буфер обмена, чтобы скопировать домен.
Примечание: Ваш домен Okta отличается от домена администратора. В вашем домене Okta нет
-admin
, напримерhttps://dev-133337.okta.com
.
Перенаправление на страницу входа
Для аутентификации пользователя ваше веб-приложение перенаправляет браузер на страницу входа, размещенную на Okta. Обычно это происходит при входе в систему, например при нажатии кнопки или при посещении пользователем защищенной страницы.
Создайте маршрут для домашней страницы вашего приложения, который отображает ссылку для запуска потока OAuth, добавив следующий код в файл
index.php
вместоTODO: определите маршруты здесь
заполнитель:Определите функцию
index()
, которая проверяет наличие маркера идентификатора в сеансе и отображает ссылку для входа, если нет. Это может быть где-то в нижней частиindex.php
:Когда пользователь щелкает ссылку «Войти», он посещает маршрут
/login
, который нам нужно определить сейчас. Добавьте следующий новый регистр в операторswitch
:Создайте функцию
start_oauth_flow()
, который запускает поток кода авторизации OAuth и перенаправляет пользователя на Okta. Опять же, это может быть ближе к концуindex.php
:
После успешной аутентификации Okta перенаправляет обратно в приложение с кодом авторизации, который затем обменивается на идентификатор и токен доступа, который вы можете использовать для подтверждения статуса входа. . Позже мы рассмотрим отображение некоторой возвращенной информации о пользователе в приложении.
Примечание: Чтобы настроить форму входа в Okta, см. Стиль виджета входа на хостинге Okta.
Определение маршрута обратного вызова
После входа пользователя в Okta Okta возвращает его на URL-адрес перенаправления с кодом авторизации в строке запроса. Затем ваше приложение обменивает этот код авторизации на токен доступа и необязательный токен обновления и токен идентификатора.
Внутри вашего оператора switch определите новый маршрут, равный URL-адресу перенаправления:
В нижней части файла создайте функцию
авторизация_кода_вызова_обработчика
, который вызывается, когда браузер пользователя посещает этот URL-адрес. В этой функции вы обмениваете код авторизации на токены:
Получить информацию о пользователе
После того, как пользователь войдет в систему, Okta возвращает часть информации из его профиля вашему приложению, например, показанную в примере ответа /userinfo . Одним из способов использования этой информации является обновление вашего пользовательского интерфейса, например, для отображения имени клиента.
Элементы профиля по умолчанию (называемые утверждениями
), возвращаемые Okta, включают адрес электронной почты пользователя, имя и предпочитаемое имя пользователя. Утверждения, которые вы видите, могут отличаться в зависимости от областей, запрошенных вашим приложением. См. раздел Настройка приложения.
Поскольку вы запросили области адрес электронной почты профиля openid
, Okta также возвращает токен идентификатора вместе с токеном доступа. Вы можете проанализировать утверждения в токене идентификатора, чтобы найти сведения о профиле пользователя.
Обратите внимание: поскольку токен идентификатора был получен вашим приложением в ответ на обмен кодом авторизации, можно пропустить обычные проверки, необходимые для токена идентификатора, полученного вашим приложением при перенаправлении.
Поскольку предыдущий код сохранял токен идентификатора в сеансе, добавьте следующий код в функцию index()
прямо над строкой Hello,
для извлечь имя пользователя из токена ID и показать его в приложении.
Протестируйте интеграцию, запустив сервер и войдя в систему под пользователем.
Запустите приложение со встроенным сервером PHP:
Откройте браузер и перейдите к
http://локальный:8080
.
Появится ссылка Войти . Нажмите на нее, и вы будете перенаправлены на Okta для входа в систему. Когда вы вернетесь, на нем должно отображаться ваше имя.
Настройка обязательной аутентификации
Ваше приложение может требовать аутентификацию для всего сайта или только для определенных маршрутов. Маршруты, не требующие проверки подлинности, доступны без входа в систему, что также называется анонимным доступом.
Требовать аутентификацию для всего
Некоторые приложения требуют аутентификации пользователя для всех маршрутов, например, для внутренней сети компании.
Способы защиты каждого маршрута различаются в зависимости от используемой инфраструктуры. В этом примере с минимальным оператором коммутатора
маршрутизатора проверьте маркер идентификатора в сеансе перед маршрутизатором и покажите ссылку для входа, если она отсутствует.
Это можно обработать следующим образом:
Требовать аутентификацию для определенного маршрута
На вашем веб-сайте может быть защищенная часть, доступная только для аутентифицированных пользователей.
Определите новую функцию (
require_login()
) и переместите код, проверяющий токен ID в сеансе, в эту функцию:Вызовите функцию
хотите защитить, например, вызов ее внутри вашей функции
index()
защищает домашнюю страницу:
Разрешить анонимный доступ
предпринять какое-либо другое действие. Например, сайт электронной коммерции может разрешить пользователю просматривать страницы анонимно и добавлять товары в корзину, но требовать от пользователя входа в систему для оформления заказа и оплаты.
Выше мы уже показали вам, как защитить определенные маршруты. Любые маршруты, которые вы явно не защищаете, имеют анонимный доступ.
Следующие шаги
Защитите свои конечные точки API.
Пользовательский домен и адрес электронной почты (откроется в новом окне)
Стиль виджета входа на хостинге Okta.
Вход пользователей в ваше мобильное приложение с использованием модели перенаправления
Мультитенантные решения (открывается в новом окне)
Флаги RewriteRule — Apache HTTP Server версии 2.4
Доступные языки: en |
fr
В этом документе обсуждаются флаги, доступные для
Директива RewriteRule
,
с подробными пояснениями и примерами.
Введение
B (экранирование обратных ссылок)
BNP|backrefnoplus (не используйте пробел для +)
С|цепь
CO|файл cookie
точек на дюйм|путь сброса
E|env
КОНЕЦ
F|запрещено
Г|ушел
H|обработчик
л|последний
Н|следующий
НЗ|без корпуса
СВ|без побега
NS|nosubreq
P|прокси
PT|проходной
QSA|qприложение
QSD|qsотменить
QSL|qslast
R|перенаправить
S|пропустить
Т|тип
См.
также- Документация модуля
- Введение в mod_rewrite
- Перенаправление и переназначение
- Управление доступом
- Виртуальные хосты
- Проксирование
- Использование RewriteMap
- Расширенные методы
- Когда не использовать mod_rewrite
- Комментарии
A RewriteRule2 может иметь 900
его поведение изменено одним или несколькими флагами. Флаги включены в
квадратные скобки в конце правила и несколько флагов разделены
запятыми.
Цель шаблона RewriteRule [Flag1,Flag2,Flag3]
Каждый флаг (за некоторыми исключениями) имеет краткую форму, например CO
, а также более длинную форму, например cookie
.
Хотя чаще всего используется
краткой форме, рекомендуется ознакомиться с
длинная форма, чтобы вы помнили, что должен делать каждый флаг.
Некоторые флаги принимают один или несколько аргументов. Флаги не чувствительны к регистру.
Флаги, изменяющие метаданные, связанные с запросом (T=, H=, E=)
не влияет на каталог и контекст htaccess, когда замена
(кроме '-') выполняется в том же цикле обработки перезаписи.
Здесь представлены все доступные флаги вместе с примером
того, как вы можете их использовать.
Флаг [B] указывает RewriteRule
экранировать небуквенно-цифровые
символов перед применением преобразования.
В версии 2.4.26 и более поздних можно ограничить экранирование определенными символами.
в обратных ссылках, указав их: [B=#?;]
. Примечание: пространство
можно использовать в списке символов для выхода, но нельзя
последний символ в списке. 9search/(.*)$" "/search.php?term=$1"
Учитывая условие поиска 'x & y/z', браузер закодирует его как
«x%20%26%20y%2Fz», делая запрос «search/x%20%26%20y%2Fz». Без буквы Б
флаг, это правило перезаписи будет сопоставлено с 'search.php?term=x & y/z', которое
не является допустимым URL-адресом и поэтому будет закодирован как search.php?term=x%20&y%2Fz=
, что не было задумано.
При установке флага B в этом же правиле параметры перекодируются
перед передачей на выходной URL-адрес, что приводит к правильному сопоставлению с
9search/(.
*)$" "/search.php?term=$1" [B,PT]
Обратите внимание, что вам также может понадобиться установить AllowEncodedSlashes
на On
, чтобы получить это
конкретный пример для работы, так как httpd не допускает закодированные косые черты в URL-адресах и
возвращает 404, если он его видит.
Это экранирование особенно необходимо в ситуации прокси,
когда серверная часть может сломаться, если представлена неэкранированным URL-адресом.
Альтернативой этому флагу является использование RewriteCond
для захвата %{THE_REQUEST}, который будет захватывать
строки в закодированном виде.
Флаг [BNP] указывает RewriteRule
экранировать пробел
в обратной ссылке на %20, а не на «+». Полезно, когда обратная ссылка
будет использоваться в компоненте пути, а не в строке запроса.
Этот флаг доступен в версии 2.4.26 и выше.
Флаг [C] или [цепочка] указывает, что правило RewriteRule
связано со следующим
правило.
То есть если правило совпадает, то оно обрабатывается как обычно и
управление переходит к следующему правилу. Однако если оно не совпадает, то
следующее правило и любые другие правила, связанные вместе,
пропущено.
Флаг [CO] или [cookie] позволяет установить файл cookie, когда
конкретный RewriteRule
Спички. Аргумент состоит из трех обязательных полей и пяти необязательных.
поля.
Полный синтаксис флага, включая все атрибуты, выглядит следующим образом:
следующим образом:
[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly:samesite]
Если в каком-либо из полей cookie требуется литеральный символ ':',
доступен альтернативный синтаксис. Чтобы согласиться на альтернативный синтаксис, файл cookie
«Имя» должно начинаться с «;» символ, а разделители полей должны быть
указывается как ';'.
[CO=;ИМЯ;ЗНАЧЕНИЕ:БОЛЬШЕЗНАЧЕНИЕ;ДОМЕН;время жизни;путь;безопасный;только http;тот же сайт]
Вы должны объявить имя, значение и домен для установки файла cookie.
Домен
Домен, для которого вы хотите, чтобы файл cookie был действительным. Это может быть
имя хоста, например www.example.com
, или это может быть домен,
например .example.com
. должно быть не менее двух частей
разделены точкой. То есть это может быть не просто .com
или .нет
. Файлы cookie такого типа запрещены файлом cookie.
модель безопасности.
Дополнительно можно установить следующие значения:
Срок службы
Время, в течение которого файл cookie будет сохраняться, в минутах.
Значение 0 указывает, что файл cookie будет сохраняться только в течение текущий сеанс браузера. Это значение по умолчанию, если нет указано.
Путь
Путь на текущем веб-сайте, для которого действителен файл cookie, например
/клиенты/
или/файлы/скачать/
.По умолчанию установлено значение
/
, т.е. интернет сайт.Безопасность
Если установлено значение
secure
,true
или1
, куки будет разрешено переводить только через безопасный (https) соединения.httpтолько
Если установлено значение
HttpOnly
,true
или1
, файл cookie будет иметь установленный флагHttpOnly
, что означает, что файл cookie недоступен для кода JavaScript на браузеры, которые поддерживают эту функцию. 9/index\.html" "-" [CO=frontdoor:yes:.example.com:1440:/]В приведенном примере правило не перезаписывает запрос. Цель перезаписи "-" указывает mod_rewrite передать запрос через без изменений. Вместо этого он устанавливает файл cookie называется «входная дверь» со значением «да». Файл cookie действителен для любого хоста в домене
.example.com
. Срок его действия истекает в 1440 году. минут (24 часа) и возвращается для всех URI.Флаг DPI приводит к тому, что часть PATH_INFO переписанного URI становится отброшен.
Этот флаг доступен в версии 2.2.12 и выше.
В контексте каталога каждый URI
RewriteRule
сравнивает с конкатенацией текущих значений URI и ПУТЬ_ИНФО.Текущий URI может быть начальным URI по запросу клиента, результат предыдущего раунда обработки mod_rewrite или результат предшествующее правило в текущем раунде обработки mod_rewrite.
Напротив, PATH_INFO, добавляемый к URI перед каждым правило отражает только значение PATH_INFO до этого раунда обработка mod_rewrite. Как следствие, если большие порции URI сопоставляются и копируются в замену в нескольких
Директивы RewriteRule
без учета какие части URI пришли из текущего PATH_INFO, окончательный URI может иметь несколько копий PATH_INFO, добавленных к нему.Используйте этот флаг для любой подстановки, где полученный PATH_INFO из предыдущего отображения этого запроса на файловую систему не интерес. Этот флаг навсегда забывает установленный PATH_INFO до того, как начался этот раунд обработки mod_rewrite.
PATH_INFO будет не пересчитываться до текущего раунда обработки mod_rewrite завершает. Последующие правила во время этого раунда обработки будут видеть только прямой результат подстановок, без всяких PATH_INFO добавлено.
С помощью флага [E] или [env] вы можете установить значение среды переменная. Обратите внимание, что некоторые переменные среды могут быть установлены после правила запускается, тем самым сбрасывая то, что вы установили. См. Документ Environment Variables для более подробной информации о том, как Environment Variables переменные работают.
Полный синтаксис этого флага:
[E=VAR:VAL] [E=!VAR]
VAL
может содержать обратные ссылки ($N
или%N
), которые расширены.Использование краткой формы
[Э=ВАР]
вы можете установить переменную среды с именем
VAR
на пустое значение.Форма
[Э=!ВАР]
позволяет сбросить ранее установленную переменную среды с именем
ВАР
.Переменные среды затем можно использовать в различных контексты, включая программы CGI, другие директивы RewriteRule или Директивы CustomLog.
В следующем примере переменной среды с именем «image» присваивается значение значение «1», если запрошенный URI является файлом изображения. Затем, что переменная среды используется для исключения этих запросов из доступа журнал.
RewriteRule "\.(png|gif|jpg)$" "-" [E=image:1] CustomLog "logs/access_log" в сочетании env=!image
Обратите внимание, что такого же эффекта можно добиться с помощью
SetEnvIf
. Данная методика предлагается как пример, а не рекомендация.Использование флага [END] завершает не только текущий раунд перезаписи обработки (например, [L]), но также предотвращает любую последующую перезапись обработка от происходящего в контексте каталога (htaccess).
Это не относится к новым запросам, полученным в результате внешних перенаправляет.
Использование флага [F] заставляет сервер возвращать статус 403 Forbidden код клиенту.
Хотя такое же поведение может быть достигнуто с помощью директива
Deny
, это позволяет более гибко назначать статус «Запрещено».Следующее правило запрещает
.exe
файлы от скачал с вашего сервера.RewriteRule "\.exe" "-" [F]
В этом примере используется синтаксис "-" для цели перезаписи, что означает что запрошенный URI не изменен. Нет причин переписывать на другой URI, если вы собираетесь запретить запрос.
При использовании [F] подразумевается [L], то есть возвращается ответ немедленно, и дальнейшие правила не оцениваются.
Флаг [G] заставляет сервер возвращать статус 410 Gone с отклик. Это указывает на то, что ресурс раньше был доступен, но не более доступен.
Как и в случае с флагом [F], вы обычно будете использовать синтаксис "-" для rewrite target при использовании флага [G]:
RewriteRule "oldproduct" "-" [G,NC]
При использовании [G] подразумевается [L] - то есть возвращается ответ немедленно, и дальнейшие правила не оцениваются.
Принудительно обрабатывает результирующий запрос с указанным обработчик. Например, можно использовать это, чтобы заставить все файлы без расширение файла для анализа обработчиком php:
RewriteRule "!\." "-" [Н=приложение/x-httpd-php]
Регулярное выражение выше -
!\.
- будет соответствовать любому запросу который не содержит литерала.
символа.Это также можно использовать для форсирования обработчика на основе некоторых условий. Например, следующий фрагмент, используемый в контексте каждого сервера, позволяет 9(/source/.+\.php)s$
- будет соответствует любому запросу, начинающемуся с/source/
, за которым следует 1 или n символов, за которыми следует.phps
буквально. обратная ссылка $1 ссылается на захваченный матч в скобках обычного выражение.Флаг [L] заставляет
mod_rewrite
остановить обработку набор правил. В большинстве случаев это означает, что если правило соответствует, дальнейшие правила будут обработаны.Это соответствует
последняя
команда в Perl, илиперерыв
команда в C. Используйте этот флаг, чтобы указать, что текущее правило должно быть применено немедленно, без учета дальнейших правил.Если вы используете
RewriteRule
в любомфайлы .htaccess
или в<Каталог>
раздела, важно иметь некоторое представление о правилах обработанный. Упрощенная форма этого состоит в том, что как только правила обрабатывается, переписанный запрос возвращается в парсинг URL двигатель, чтобы делать то, что он может с ним. Возможно, что как переписанный запрос обрабатывается,.htaccess
файл или<Каталог>
раздел могут встретиться снова, и, таким образом, набор правил может быть снова запущен из Начало. Чаще всего это происходит, если одно из правил вызывает перенаправление — внутреннее или внешнее — заставляя процесс запроса начать сначала.Поэтому важно, если вы используете директивы
RewriteRule
в одном из этих контексты, что вы предпринимаете явные шаги, чтобы избежать зацикливания правил, а не рассчитывайте исключительно на флаг [L] для прекращения выполнения серии правила, как показано ниже.Альтернативный флаг [END] может использоваться для завершения не только текущий раунд обработки перезаписи, но предотвратить любые последующие переписать обработку, происходящую в каждом каталоге (htaccess) контекст. Это не относится к новым запросам, полученным в результате внешних перенаправляет.
Приведенный здесь пример перепишет любой запрос на
index.php
, предоставляя исходный запрос в виде строки запроса аргументindex.php
, однакоRewriteCond
гарантирует, что если запрос уже за 9(.*)" "/index.php?req=$1" [L,PT]Флаг [N] заставляет набор правил снова начать сначала, используя результат набора правил в качестве отправной точки. Использовать с особой осторожностью, так как это может привести к зацикливанию.
Флаг [Next] можно использовать, например, если вы хотите заменить определенную строку или букву повторно в запросе. Пример показан здесь заменит A на B везде в запросе и продолжит делать так до тех пор, пока не будет больше чем заменить.
RewriteRule "(.*)A(.*)" "$1B$2" [N]
Вы можете думать об этом как о цикле
while
: шаблон все еще соответствует (т. е. пока URI все еще содержитA
), выполните эту замену (т. е. заменитеA
сB
).В версии 2.4.8 и более поздних версиях этот модуль возвращает ошибку после 32 000 итераций в защитить от непреднамеренного зацикливания. Альтернативное максимальное количество количество итераций можно указать, добавив к флагу N.
# Будьте готовы заменить 1 символ в каждом проходе цикла RewriteRule "(.+)[><;]$" "$1" [N=64000] # ... или отказаться, если после 10 циклов RewriteRule "(.+)[><;]$" "$1" [N=10]
Использование флага [NC] приводит к сопоставлению
RewriteRule
в без учета регистра. То есть ему все равно, появятся ли буквы в верхнем или нижнем регистре в совпавшем URI.В приведенном ниже примере любой запрос файла изображения будет передан через прокси. на ваш выделенный сервер изображений.
Совпадение не чувствительно к регистру, так что 9/anchor/(.+)" "/bigpage.html#$1" [NE,R]
В приведенном выше примере будет перенаправлено
/anchor/xyz
на/bigpage.html#xyz
. Пропуск [NE] приведет к # преобразуется в его эквивалент в шестнадцатеричном коде,%23
, который будет затем привести к состоянию ошибки 404 Not Found.Использование флага [NS] запрещает использование правила на подзапросы. Например, страница, включенная с помощью SSI (Server Side Include) является подзапросом, и вы можете избежать перезаписи происходит по этим подзапросам. Также, когда
mod_dir
пытается узнать информацию о возможных файлах каталога по умолчанию (например, файлыindex.html
), это внутренний подзапрос, и вы часто хотите избежать перезаписи таких подзапросов. На подзапросах это не всегда полезно и даже может привести к ошибкам, если применяется полный набор правил. Используйте этот флаг, чтобы исключить проблемные правила.Чтобы решить, использовать это правило или нет: если вы добавляете URL-адреса с префиксом CGI-скрипты, чтобы заставить их обрабатываться CGI-скриптом, это вероятно, что вы столкнетесь с проблемами (или значительными накладными расходами) по подзапросам. В этих случаях используйте этот флаг.
Изображения, файлы javascript или файлы css, загружаемые как часть HTML-страницы, не являются подзапросами - браузер запрашивает их как отдельные HTTP Запросы.
Использование флага [P] приводит к тому, что запрос обрабатывается
mod_proxy
и обрабатывается через прокси-запрос. За например, если вы хотите, чтобы все запросы изображений обрабатывались серверной частью image, вы можете сделать что-то вроде следующего:RewriteRule "/(.*)\.(jpg|gif|png)$" "http://images.example.com/$1.$2" [P]
Использование флага [P] подразумевает [L] — то есть запрос немедленно пропихнуть через прокси, и никаких следующих правил не будет обдуманный.
Вы должны убедиться, что строка подстановки является допустимым URI.
(обычно начинается с
http://
имя хоста ), который может быть обрабатываетсяmod_proxy
. Если нет, вы получите ошибка прокси-модуля. Используйте этот флаг для достижения более мощная реализация директивыProxyPass
, для сопоставления удаленного контента с пространством имен локального сервера.Предупреждение системы безопасности
Будьте внимательны при создании целевого URL-адреса правила, учитывая влияние на безопасность от разрешения клиенту влиять на набор URL-адреса, для которых ваш сервер будет действовать как прокси. Убедитесь, что схема часть URL-адреса с именем хоста либо фиксирована, либо не позволяет неправомерное влияние клиента.
Предупреждение о производительности
Использование этого флага запускает использование
mod_proxy
без обработки постоянных подключений. Этот означает, что производительность вашего прокси будет лучше, если вы настроите его сProxyPass
илиProxyPassMatch
Это связано с тем, что этот флаг запускает использование рабочего процесса по умолчанию, который не обрабатывает объединение/повторное использование соединений.
Избегайте использования этого флага и по возможности отдавайте предпочтение этим директивам.
Примечание:
mod_proxy
должен быть включен, чтобы использовать этот флаг.Предполагается, что целью (или строкой замены) в RewriteRule является путь к файлу по умолчанию. Использование флага [PT] приводит к его обработке вместо этого как URI. То есть, использование флага [PT] приводит к результату
RewriteRule
для передачи обратно Сопоставление URL-адресов, чтобы сопоставления на основе местоположения, такие какAlias
,Redirect
илиScriptAlias
, например, могли иметь шанс подействовать.Если, например, у вас есть
Псевдоним
для /icons и иметьRewriteRule
, указывающий туда, вы должны используйте флаг [PT], чтобы убедиться, чтоПсевдоним
оценивается.Псевдоним "/icons" "/usr/local/apache/icons" RewriteRule "/pics/(.+)\.jpg$" "/icons/$1.
gif" [PT]
Отсутствие флага [PT] в этом случае приведет к тому, что псевдоним будет игнорируется, в результате чего возвращается ошибка «Файл не найден».
Флаг
PT
подразумевает флагL
: перезапись будет остановлена, чтобы передать запрос следующий этап обработки.Обратите внимание, что флаг
PT
подразумевается для каждого каталога. контексты, такие как<Каталог>
раздела или в файлах.htaccess
. Единственный способ обойти это это переписать на-
.Когда замещающий URI содержит строку запроса, поведение по умолчанию из
RewriteRule
отбросить существующую строку запроса и заменить ее вновь сгенерированной. Использование флага [QSA] приводит к объединению строк запроса.Рассмотрим следующее правило:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
С флагом [QSA] запрос на
/pages/123? один=два
будет сопоставлен с/page.
. Без [QSA] флаг, тот же запрос будет сопоставлен сphp?page=123&one=two
/page.php?page=123
— то есть существующая строка запроса будет отброшен.Когда запрошенный URI содержит строку запроса, а целевой URI не нет, по умолчанию
RewriteRule
копирует этот запрос строку на целевой URI. Использование флага [QSD] приводит к тому, что строка запроса быть отброшенным.Этот флаг доступен в версии 2.4.0 и выше.
Совместное использование [QSD] и [QSA] приведет к тому, что [QSD] будет иметь приоритет.
Если целевой URI имеет строку запроса, поведение по умолчанию будет наблюдается, то есть исходная строка запроса будет отброшена и заменено строкой запроса в цели
RewriteRule
URI.По умолчанию первый (самый левый) вопросительный знак в замене отделяет путь от строки запроса. Использование флага [QSL] указывает
RewriteRule
вместо разделения два компонента, использующие последний (самый правый) вопросительный знак.Это полезно при сопоставлении с файлами, в которых есть буквальные вопросительные знаки. их имя файла. Если в замене не используется строка запроса, в сочетании с этим флагом к нему может быть добавлен вопросительный знак.
Этот флаг доступен в версии 2.4.19 и выше.
Использование флага [R] вызывает перенаправление HTTP в браузер. Если указан полный URL-адрес (т. е. включая
http://имя_сервера/
), то на него будет выдано перенаправление место нахождения. В противном случае текущий протокол, имя сервера и номер порта будет использоваться для генерации URL-адреса, отправленного с перенаправлением.Можно указать любой действительный код состояния ответа HTTP, используя синтаксис [R=305], с кодом состояния 302, используемым по умолчанию, если ничего не указано. Указанный код состояния не обязательно обязательно должен быть код состояния перенаправления (3xx). Однако, если код состояния находится за пределами диапазона перенаправления (300-399) тогда строка подстановки полностью отбрасывается, а перезапись останавливается, как если бы использовались
L
.В дополнение к кодам состояния ответа вы также можете указать перенаправление статус, используя их символические имена:
temp
(по умолчанию),постоянный
илисм. другой
.Вы почти всегда будете использовать [R] в сочетании с [L] (то есть, используйте [R,L]), потому что сам по себе флаг [R] предшествует
http://thishost[:thisport]
в URI, но затем передает это к следующему правилу в наборе правил, что часто может привести к «Недействительному URI в предупреждениях запроса.Флаг [S] используется для пропуска правил, которые вы не хотите запускать. синтаксис флага пропуска: [S= N ], где N означает количество правил для пропуска (при условии, что
RewriteRule соответствует
). Это можно представить как переходк
. утверждение в вашем наборе правил перезаписи. В следующем примере мы хотим только для запускаRewriteRule
, если запрошенный URI не соответствует реальному файлу.# Это запрос несуществующего файла? RewriteCond "%{REQUEST_FILENAME}" "!-f" RewriteCond "%{REQUEST_FILENAME}" "!-d" # Если это так, пропустите эти два RewriteRules Правило перезаписи ".?" "-" [С=2] RewriteRule "(.*\.gif)" "images.php?$1" RewriteRule "(.*\.html)" "docs.php?$1"
Этот метод полезен, поскольку
RewriteCond
применяется только кНемедленно переписать правило
после него. Таким образом, если вы хотите применитьRewriteCond
к несколькимRewriteRule
, одним из возможных методов является отмените эти условия и добавьтеRewriteRule
с флагом [Skip]. Вы можете используйте это для создания псевдоконструкций if-then-else: Последнее правило предложение then становитсяskip=N
, где N — количество правил в предложении else:# Файл существует? RewriteCond "%{REQUEST_FILENAME}" "!-f" RewriteCond "%{REQUEST_FILENAME}" "!-d" # Создайте конструкцию if-then-else, пропустив 3 строки, если мы хотели перейти к строфе else.
Правило перезаписи ".?" "-" [С=3] # ЕСЛИ файл существует, то: RewriteRule "(.*\.gif)" "images.php?$1" RewriteRule "(.*\.html)" "docs.php?$1" # Пропустить строфу else. Правило перезаписи ".?" "-" [С=1] # ЕЩЕ... RewriteRule "(.*)" "404.php?file=$1" # END
Вероятно, проще выполнить такую настройку, используя 9Вместо директив 0041
,Устанавливает тип MIME, с которым будет получен результирующий ответ. послал. Это имеет тот же эффект, что и директива
AddType
.Например, вы можете использовать следующую технику для обслуживания Perl исходный код в виде обычного текста, если он запрошен определенным образом:
# Подавать файлы .pl в виде обычного текста RewriteRule "\.pl$" "-" [T=text/plain]
Или, возможно, если у вас есть камера, которая выдает изображения в формате jpeg без расширения файлов, вы можете заставить эти изображения обслуживаться с правильный тип MIME в силу их имен файлов:
# Файлы с 'IMG' в названии являются изображениями в формате jpg.