Флаги RewriteRule
В этом документе рассматриваются флаги, доступные директиве RewriteRule, а также приводятся подробные объяснения и примеры.
Введение
Поведение RewriteRule можно изменить с помощью одного или нескольких флагов. Флаги указываются в квадратных скобках в конце правила, а несколько флагов разделяются запятыми.
RewriteRule pattern target [Flag1,Flag2,Flag3]
У каждого флага (за некоторыми исключениями) есть краткая форма, например CO, и полная форма, например cookie. Хотя чаще всего используют краткую форму, рекомендуется ознакомиться с полной формой, чтобы запомнить назначение каждого флага. Некоторые флаги принимают один или несколько аргументов. Флаги не чувствительны к регистру.
Флаги, изменяющие метаданные запроса (T=, H=, E=), не влияют на контекст per-directory и htaccess, если во время того же прохода обработки перезаписи выполняется подстановка (отличная от '-').
Ниже описан каждый из доступных флагов и приведен пример его использования.
B (экранирование обратных ссылок)
Флаг [B] указывает RewriteRule экранировать не буквенно-цифровые символы перед применением преобразования.
mod_rewrite необходимо снимать экранирование URL перед их сопоставлением, поэтому при использовании обратные ссылки уже не экранированы. Флаг B экранирует не буквенно-цифровые символы в обратных ссылках. Например, рассмотрим правило:
Чтобы аналогичным образом экранировать переменные сервера, см. функцию сопоставления "escape"
RewriteRule "^search/(.*)$" "/search.php?term=$1"
Если поисковый запрос — 'x & y/z', браузер закодирует его как 'x%20%26%20y%2Fz', и запрос будет выглядеть как 'search/x%20%26%20y%2Fz'. Без флага B это правило перезаписи сопоставит запрос с 'search.php?term=x & y/z', что не является допустимым URL, поэтому он будет закодирован как search.php?term=x%20&y%2Fz=, что не соответствует ожидаемому результату.
Если добавить флаг B к этому же правилу, параметры будут закодированы повторно перед передачей в выходной URL, и результатом будет корректное сопоставление с /search.php?term=x%20%26%20y%2Fz.
RewriteRule "^search/(.*)$" "/search.php?term=$1" [B,PT]
Обратите внимание: чтобы этот пример работал, возможно, также потребуется установить AllowEncodedSlashes в значение On, поскольку httpd не разрешает закодированные косые черты в URL и возвращает ошибку 404, если обнаруживает такую черту.
Такое экранирование особенно необходимо при использовании прокси, поскольку URL без экранирования может привести к сбою на сервере-обработчике.
Вместо этого флага можно использовать RewriteCond для сопоставления с %{THE_REQUEST}, который захватит строки в закодированном виде.
Начиная с версии 2.4.26, можно ограничить экранирование конкретными символами в обратных ссылках, перечислив их: [B=#?;]. Примечание: в списке символов для экранирования можно использовать пробел, но необходимо заключить весь третий аргумент RewriteRule в кавычки, а пробел не должен быть последним символом в списке.
# Escape spaces and question marks. The quotes around the final argument # are required when a space is included. RewriteRule "^search/(.*)$" "/search.php?term=$1" "[B= ?]"
Чтобы ограничить набор символов, экранируемых таким образом, см. #flag_bne и #flag_bctls
BNP|backrefnoplus (не преобразовывать пробел в +)
Флаг [BNP] указывает RewriteRule экранировать пробел в обратной ссылке как %20, а не как '+'. Полезен, когда обратная ссылка используется в части пути, а не в строке запроса.
# Escape spaces to %20 in the path instead of + as used in form submission via # the query string RewriteRule "^search/(.*)$" "/search.php/$1" "[B,BNP]"
Этот флаг доступен в версии 2.4.26 и более поздних.
BCTLS
Флаг [BCTLS] аналогичен флагу [B], но экранирует только управляющие символы и пробел. Это тот же набор символов, которые отклоняются, если их скопировать в строку запроса без кодирования.
# Escape control characters and spaces RewriteRule "^search/(.*)$" "/search.php/$1" "[BCTLS]"
Этот флаг доступен в версии 2.4.57 и более поздних.
BNE
Символы, перечисленные в [BNE=...], исключаются из набора символов флагов [B] или [BCTLS]. Перечисленные символы не будут экранироваться.
# Escape the default characters, but leave / RewriteRule "^search/(.*)$" "/search.php?term=$1" "[B,BNE=/]"
Этот флаг доступен в версии 2.4.57 и более поздних.
C|chain (цепочка)
Флаг [C] или [chain] указывает, что RewriteRule объединено в цепочку со следующим правилом. Иными словами, если правило совпадает, оно обрабатывается как обычно, а выполнение переходит к следующему правилу. Если же совпадения нет, следующее правило и все остальные связанные с ним правила пропускаются.
CO|cookie
Флаг [CO] или [cookie] позволяет установить cookie, если совпадает определенное RewriteRule. Аргумент включает три обязательных и пять необязательных полей.
Полный синтаксис флага со всеми атрибутами выглядит следующим образом:
[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly:samesite]Если в любом из полей cookie требуется буквальный символ ':', можно использовать альтернативный синтаксис. Для этого перед именем cookie следует указать символ ';', а в качестве разделителей полей использовать ';'.
[CO=;NAME;VALUE:MOREVALUE;DOMAIN;lifetime;path;secure;httponly;samesite]Чтобы установить cookie, необходимо указать его имя, значение и домен.
- Домен
- Домен, для которого будет действителен cookie. Это может быть имя хоста, например
www.example.com, или домен, например.example.com. Домен должен состоять как минимум из двух частей, разделенных точкой. То есть это не может быть просто.comили.net. Модель безопасности cookie запрещает cookie такого типа.
При желании можно также задать следующие значения:
- Срок действия
- Время в минутах, в течение которого cookie будет храниться.
- Значение 0 означает, что cookie будет храниться только в течение текущего сеанса браузера. Это значение используется по умолчанию, если ничего не указано.
- Путь
- Путь на текущем веб-сайте, для которого действителен cookie, например
/customers/или/files/download/. - По умолчанию используется значение
/— то есть весь веб-сайт. - Secure
- Если установлено значение
secure,trueили1, cookie будет передаваться только через защищенные соединения (https). - httponly
- Если установлено значение
HttpOnly,trueили1, для cookie будет установлен флагHttpOnly, который делает его недоступным для кода JavaScript в браузерах, поддерживающих эту функцию. - samesite
- Если задано значение, отличное от
falseили0, атрибутуSameSiteприсваивается указанное значение. Типичные значения:None,LaxиStrict. Доступно начиная с версии 2.4.47.
Рассмотрим следующий пример:
RewriteEngine On RewriteRule "^/index\.html" "-" [CO=frontdoor:yes:.example.com:1440:/]
В приведенном примере правило не перезаписывает запрос. Цель перезаписи "-" указывает mod_rewrite передать запрос без изменений. Вместо этого правило устанавливает cookie с именем 'frontdoor' и значением 'yes'. Cookie действителен для любого хоста в домене .example.com. Срок его действия составляет 1440 минут (24 часа), а передается он для всех URI.
DPI|discardpath (отбросить путь)
Флаг DPI приводит к отбрасыванию части PATH_INFO перезаписанного URI.
Этот флаг доступен в версии 2.2.12 и более поздних.
В контексте per-directory URI, с которым сравнивается каждый RewriteRule, представляет собой объединение текущих значений URI и PATH_INFO.
Текущий 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
С помощью флага [E] или [env] можно задать значение переменной окружения. Обратите внимание, что некоторые переменные окружения могут задаваться после выполнения правила, отменяя таким образом заданное вами значение. Дополнительные сведения о работе переменных окружения см. в документе о переменных окружения.
Полный синтаксис этого флага:
[E=VAR:VAL] [E=!VAR]
VAL может содержать обратные ссылки ($N или %N), которые будут подставлены.
С помощью краткой формы
[E=VAR]можно задать пустое значение для переменной окружения с именем VAR.
Форма
[E=!VAR]позволяет отменить ранее заданное значение переменной окружения с именем VAR.
Переменные окружения можно использовать в самых разных контекстах, в том числе в программах CGI, других директивах RewriteRule или директивах CustomLog.
В следующем примере переменной окружения с именем 'image' присваивается значение '1', если запрошенный URI указывает на файл изображения. Затем эта переменная окружения используется, чтобы исключить такие запросы из журнала доступа.
RewriteRule "\.(png|gif|jpg)$" "-" [E=image:1] CustomLog "logs/access_log" combined env=!image
Обратите внимание, что такого же результата можно добиться с помощью SetEnvIf. Этот прием приведен в качестве примера, а не рекомендации.
END
Флаг [END] завершает не только текущий проход обработки перезаписи (как [L]), но и предотвращает последующую обработку перезаписи в контексте per-directory (htaccess).
Это не относится к новым запросам, возникающим в результате внешних перенаправлений.
F|forbidden (запрещено)
Флаг [F] заставляет сервер возвращать клиенту код состояния 403 Forbidden. Хотя такого же поведения можно добиться с помощью директивы Deny, этот флаг дает больше гибкости при назначении статуса Forbidden.
Следующее правило запретит загружать с вашего сервера файлы .exe.
RewriteRule "\.exe" "-" [F]
В этом примере для цели перезаписи используется синтаксис "-", означающий, что запрошенный URI не изменяется. Если запрос запрещен, нет смысла перезаписывать его в другой URI.
При использовании [F] подразумевается [L]: ответ возвращается немедленно, и дальнейшие правила не обрабатываются.
G|gone (удален)
Флаг [G] заставляет сервер вернуть в ответе статус 410 Gone. Это означает, что ресурс был доступен, но больше недоступен.
Как и при использовании флага [F], для цели перезаписи с флагом [G] обычно применяется синтаксис "-":
RewriteRule "oldproduct" "-" [G,NC]
При использовании [G] подразумевается [L]: ответ возвращается немедленно, и дальнейшие правила не обрабатываются.
H|handler (обработчик)
Заставляет обрабатывать полученный запрос с помощью указанного обработчика. Например, можно заставить обработчик PHP анализировать все файлы без расширения:
RewriteRule "!\." "-" [H=application/x-httpd-php]
Приведенное выше регулярное выражение — !\. — соответствует любому запросу, не содержащему буквальный символ ..
Этот флаг также можно использовать, чтобы выбирать обработчик в зависимости от условий. Например, следующий фрагмент в контексте per-server позволяет .php файлам отображаться с помощью mod_php, если к ним обращаются с расширением .phps:
RewriteRule "^(/source/.+\.php)s$" "$1" [H=application/x-httpd-php-source]
Приведенное выше регулярное выражение — ^(/source/.+\.php)s$ — соответствует любому запросу, начинающемуся с /source/, за которым следуют один или несколько символов, а затем буквальный .phps. Обратная ссылка $1 ссылается на совпадение, захваченное в круглых скобках регулярного выражения.
L|last (последний)
Флаг [L] заставляет mod_rewrite прекратить обработку набора правил. В большинстве случаев это означает, что при совпадении правила дальнейшие правила обрабатываться не будут. Это соответствует команде last в Perl или команде break в C. Используйте этот флаг, чтобы указать, что текущее правило следует применить немедленно, не проверяя дальнейшие правила.
При использовании RewriteRule в файлах .htaccess или секциях <Directory> важно понимать, как обрабатываются правила. Если упростить, после обработки правил переписанный запрос передается обратно механизму анализа URL, который выполняет дальнейшую обработку. При обработке переписанного запроса файл .htaccess или секция <Directory> могут встретиться повторно, и набор правил может быть запущен заново с самого начала. Чаще всего это происходит, если одно из правил вызывает перенаправление — внутреннее или внешнее, — из-за которого обработка запроса начинается заново.
Поэтому при использовании директив RewriteRule в одном из этих контекстов важно явно предотвращать зацикливание правил и не полагаться только на флаг [L] для завершения выполнения серии правил, как показано ниже.
В качестве альтернативы можно использовать флаг [END], который завершает не только текущий проход обработки перезаписи, но и предотвращает последующую обработку перезаписи в контексте per-directory (htaccess). Это не относится к новым запросам, возникающим в результате внешних перенаправлений.
В приведенном здесь примере любой запрос перенаправляется на index.php, а исходный запрос передается в качестве аргумента строки запроса для index.php. Однако директива RewriteCond гарантирует, что, если запрос уже направлен на index.php, RewriteRule будет пропущена.
RewriteBase "/"
RewriteCond "%{REQUEST_URI}" !=/index.php
RewriteRule "^(.*)" "/index.php?req=$1" [L,PT] N|next (следующий)
Флаг [N] запускает набор правил заново с самого начала, используя в качестве исходных данных результат уже выполненной обработки набора правил. Используйте его с особой осторожностью, поскольку он может привести к зацикливанию.
Например, флаг [Next] можно использовать, если требуется многократно заменять определенную строку или букву в запросе. В показанном здесь примере все вхождения A в запросе будут заменены на B, и обработка продолжится, пока не останется вхождений A.
RewriteRule "(.*)A(.*)" "$1B$2" [N]
Это можно представить как цикл while: пока этот шаблон соответствует (то есть пока URI содержит A), выполняется подстановка (то есть A заменяется на B).
Начиная с версии 2.4.8, этот модуль возвращает ошибку после 10 000 итераций, чтобы защититься от непреднамеренного зацикливания. Максимальное число итераций можно изменить, добавив его к флагу N.
# Be willing to replace 1 character in each pass of the loop RewriteRule "(.+)[><;]$" "$1" [N=32000] # ... or, give up if after 10 loops RewriteRule "(.+)[><;]$" "$1" [N=10]
NC|nocase (без учета регистра)
Флаг [NC] обеспечивает сопоставление RewriteRule без учета регистра. Иными словами, неважно, содержатся в сопоставляемом URI заглавные или строчные буквы.
В приведенном ниже примере любой запрос к файлу изображения будет проксироваться на выделенный сервер изображений. Сопоставление выполняется без учета регистра, поэтому, например, допустимы файлы .jpg и .JPG.
RewriteRule "(.*\.(jpg|gif|png))$" "http://images.example.com$1" [P,NC]
NE|noescape (без экранирования)
По умолчанию специальные символы, например & и ?, в правилах, приводящих к внешним перенаправлениям, преобразуются в соответствующие шестнадцатеричные коды. Флаг [NE] предотвращает это преобразование.
RewriteRule "^/anchor/(.+)" "/bigpage.html#$1" [NE,R]
Приведенный выше пример перенаправит /anchor/xyz на /bigpage.html#xyz. Если не указать [NE], символ # будет преобразован в соответствующий шестнадцатеричный код %23, что приведет к ошибке 404 Not Found.
NS|nosubreq (не подзапрос)
Флаг [NS] запрещает применять правило к подзапросам. Например, страница, включенная с помощью SSI (Server Side Include), является подзапросом, и вы можете захотеть исключить перезапись таких подзапросов. Кроме того, когда mod_dir пытается получить сведения о возможных файлах по умолчанию для каталога (например, файлах index.html), создается внутренний подзапрос, для которого часто требуется исключить перезапись. Применение полного набора правил к подзапросам может быть бесполезным и даже приводить к ошибкам. Используйте этот флаг, чтобы исключить проблемные правила.
Чтобы решить, нужен ли этот флаг: если вы добавляете к URL префикс со скриптами CGI, чтобы передавать их на обработку скрипту CGI, при подзапросах, скорее всего, возникнут проблемы (или существенные накладные расходы). В таких случаях используйте этот флаг.
Изображения, файлы JavaScript и CSS, загружаемые в составе HTML-страницы, не являются подзапросами: браузер запрашивает их как отдельные HTTP-запросы.
P|proxy (прокси)
Флаг [P] заставляет mod_proxy обрабатывать запрос как прокси-запрос. Например, чтобы передавать все запросы к изображениям на сервер изображений в серверной части, можно использовать следующее правило:
RewriteRule "/(.*)\.(jpg|gif|png)$" "http://images.example.com/$1.$2" [P]
При использовании флага [P] подразумевается [L]: запрос немедленно передается прокси, а последующие правила не проверяются.
Убедитесь, что строка подстановки является допустимым URI (обычно начинается с http://имя_хоста), который может обработать mod_proxy. В противном случае модуль прокси выдаст ошибку. Этот флаг позволяет реализовать более мощный вариант директивы ProxyPass, сопоставляя удаленное содержимое с пространством имен локального сервера.
Предупреждение о безопасности
При формировании целевого URL правила учитывайте последствия для безопасности, связанные с тем, что клиент может влиять на набор URL, для которых ваш сервер будет работать как прокси. Убедитесь, что схема и имя хоста URL заданы явно либо клиент не может оказывать на них чрезмерное влияние.
Предупреждение о производительности
Использование этого флага приводит к применению mod_proxy без поддержки постоянных соединений, поскольку в этом случае используется рабочий процесс по умолчанию, который не поддерживает объединение и повторное использование соединений.
Чтобы использовать постоянные соединения, необходимо настроить блок Proxy как минимум для схемы и имени хоста целевого URL и добавить в него директиву ProxySet, например, для задания времени ожидания.
Если настроить ProxyPass или ProxyPassMatch, постоянные соединения будут использоваться автоматически.
Примечание: для использования этого флага необходимо включить mod_proxy.
PT|passthrough (передать дальше)
По умолчанию цель (или строка подстановки) в RewriteRule считается путем к файлу. Флаг [PT] заставляет трактовать ее как URI. Иными словами, флаг [PT] передает результат RewriteRule обратно на этап сопоставления URL, чтобы могли примениться сопоставления на основе местоположения, например Alias, Redirect или ScriptAlias.
Например, если для /icons настроен Alias и на него указывает RewriteRule, следует использовать флаг [PT], чтобы гарантировать выполнение Alias.
Alias "/icons" "/usr/local/apache/icons" RewriteRule "/pics/(.+)\.jpg$" "/icons/$1.gif" [PT]
Если в этом случае не указать флаг [PT], Alias будет проигнорирован, и вернется ошибка 'File not found'.
Флаг PT подразумевает флаг L: перезапись прекращается, чтобы передать запрос на следующий этап обработки.
Обратите внимание, что флаг PT подразумевается в контекстах per-directory, например в секциях <Directory> или файлах .htaccess. Единственный способ обойти это — выполнить перезапись в -.
QSA|qsappend (добавить строку запроса)
Если URI замены содержит строку запроса, по умолчанию RewriteRule отбрасывает существующую строку запроса и заменяет ее новой. Флаг [QSA] объединяет строки запроса.
Рассмотрим следующее правило:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
С флагом [QSA] запрос к /pages/123?one=two будет сопоставлен с /page.php?page=123&one=two. Без флага [QSA] тот же запрос будет сопоставлен с /page.php?page=123, то есть существующая строка запроса будет отброшена.
QSD|qsdiscard (отбросить строку запроса)
Если запрошенный URI содержит строку запроса, а целевой URI — нет, по умолчанию RewriteRule копирует строку запроса в целевой URI. Флаг [QSD] приводит к отбрасыванию строки запроса.
Этот флаг доступен в версии 2.4.0 и более поздних.
При совместном использовании [QSD] и [QSA] приоритет имеет [QSD].
Если целевой URI содержит строку запроса, применяется поведение по умолчанию: исходная строка запроса отбрасывается и заменяется строкой запроса из целевого URI RewriteRule.
QSL|qslast (последний разделитель строки запроса)
По умолчанию первый (самый левый) вопросительный знак в строке подстановки отделяет путь от строки запроса. Флаг [QSL] указывает RewriteRule разделять эти два компонента по последнему (самому правому) вопросительному знаку.
Это полезно при сопоставлении с файлами, в имени которых буквально содержится вопросительный знак. Если строка запроса в подстановке не используется, вопросительный знак можно добавить к ней в сочетании с этим флагом.
Этот флаг доступен в версии 2.4.19 и более поздних.
R|redirect (перенаправление)
Флаг [R] приводит к отправке браузеру HTTP-перенаправления. Если указан полный URL (то есть включен http://servername/), перенаправление будет выполнено по этому адресу. В противном случае для формирования URL, отправляемого в ответе перенаправления, будут использоваться текущий протокол, имя сервера и номер порта.
Можно указать любой допустимый код состояния HTTP, используя синтаксис [R=305]. Если код не указан, по умолчанию используется 302. Указанный код состояния не обязательно должен обозначать перенаправление (код 3xx). Однако если код состояния находится за пределами диапазона перенаправлений (300–399), строка подстановки полностью отбрасывается, а перезапись прекращается, как при использовании L.
Помимо кодов состояния ответа, можно указывать перенаправление с помощью их символьных имен: temp (по умолчанию), permanent или seeother.
Почти всегда флаг [R] следует использовать вместе с [L] (то есть указывать [R,L]), поскольку без него флаг [R] добавляет http://thishost[:thisport] к URI, но затем передает его следующему правилу в наборе, что часто приводит к предупреждениям 'Invalid URI in request'.
S|skip (пропустить)
Флаг [S] используется для пропуска правил, которые не требуется выполнять. Синтаксис флага пропуска: [S=N], где N обозначает число пропускаемых правил (при условии, что совпало RewriteRule и все предшествующие директивы RewriteCond). Это можно считать оператором goto в наборе правил перезаписи. В следующем примере директива RewriteRule должна выполняться, только если запрошенный URI не соответствует существующему файлу.
# Is the request for a non-existent file?
RewriteCond "%{REQUEST_FILENAME}" !-f
RewriteCond "%{REQUEST_FILENAME}" !-d
# If so, skip these two RewriteRules
RewriteRule ".?" "-" [S=2]
RewriteRule "(.*\.gif)" "images.php?$1"
RewriteRule "(.*\.html)" "docs.php?$1" Этот прием полезен, поскольку директива RewriteCond применяется только к непосредственно следующей за ней директиве RewriteRule. Поэтому, если требуется применить RewriteCond к нескольким директивам RewriteRule, можно инвертировать эти условия и добавить директиву RewriteRule с флагом [Skip]. Так можно создавать псевдоконструкции if-then-else: последнее правило ветви then становится skip=N, где N — число правил в ветви else:
# Does the file exist?
RewriteCond "%{REQUEST_FILENAME}" !-f
RewriteCond "%{REQUEST_FILENAME}" !-d
# Create an if-then-else construct by skipping 3 lines if we meant to go to the "else" stanza.
RewriteRule ".?" "-" [S=3]
# IF the file exists, then:
RewriteRule "(.*\.gif)" "images.php?$1"
RewriteRule "(.*\.html)" "docs.php?$1"
# Skip past the "else" stanza.
RewriteRule ".?" "-" [S=1]
# ELSE...
RewriteRule "(.*)" "404.php?file=$1"
# END Вероятно, такую конфигурацию проще реализовать с помощью директив <If>, <ElseIf> и <Else>.
T|type (тип)
Задает тип MIME, с которым будет отправлен ответ. Действие этого флага совпадает с действием директивы AddType.
Например, следующий прием можно использовать, чтобы отдавать исходный код Perl как обычный текст при запросе особым образом:
# Serve .pl files as plain text RewriteRule "\.pl$" "-" [T=text/plain]
Или, например, если ваша камера создает изображения JPEG без расширений файлов, можно принудительно указывать правильный тип MIME для этих изображений на основании их имен файлов:
# Files with 'IMG' in the name are jpg images. RewriteRule "IMG" "-" [T=image/jpg]
Обратите внимание, что это упрощенный пример, и его можно реализовать лучше с помощью <FilesMatch>. Прежде чем прибегать к перезаписи, всегда рассматривайте альтернативные решения: перезапись неизменно оказывается менее эффективным решением, чем альтернативы.
При использовании в контексте per-directory в качестве подстановки используйте только - (дефис) на протяжении всего прохода обработки mod_rewrite. В противном случае тип MIME, заданный этим флагом, будет потерян из-за внутренней повторной обработки (включая последующие проходы обработки mod_rewrite). В этом контексте флаг L может пригодиться для завершения текущего прохода обработки mod_rewrite.
UnsafeAllow3F
Этот флаг необходимо установить, чтобы разрешить продолжение перезаписи, если в обрабатываемом HTTP-запросе содержится закодированный вопросительный знак '%3f', а результат перезаписи содержит '?' в строке подстановки. Это защищает от вредоносных URL, использующих захват и повторную подстановку закодированного вопросительного знака.
UnsafePrefixStat
Этот флаг необходимо установить для подстановок в контексте сервера, которые начинаются с переменной или обратной ссылки и преобразуются в путь файловой системы. К таким подстановкам не добавляется корень документов. Это защищает от вредоносных URL, которые могут привести к сопоставлению развернутой подстановки с неожиданным расположением в файловой системе.
Доступно в Apache HTTP Server 2.4.60 и более поздних версиях.
UNC
Этот флаг предотвращает объединение нескольких начальных косых черт, используемых в путях UNC Windows. Флаг не требуется, если подстановка правила начинается с нескольких буквальных косых черт.
Доступно в Apache HTTP Server 2.4.62 и более поздних версиях.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/rewrite/flags.html