Apache. Документация на русском


Директивы Apache
  1    2    3    4    5    6    7    8    9    10    11    12    13    14    15    16    17    18    19    20    21    22    23    24    25    26    27    28    29    30    31    32    33    34    35    36    37    38    39    40    41    42    43    44    45    46    47    48    49    50    51    52    53    54    55    56    57    58    59    60    61    62    63    64    65    66    67    68    69    70    71    72    73    74    75    76    77    78    79    80    81    82    83    84    85  
  86    87    88    89    90    91      92    
  93    94    95    96    97    98    99    100    101    102    103    104    105    106    107    108    109    110    111    112    113    114    115    116    117    118    119    120    121    122    123    124    125    126    127    128    129    130    131    132    133    134    135    136    137    138    139    140    141    142    143    144    145    146    147    148    149    150    151    152    153    154    155    156    157    158    159    160    161    162    163    164    165  
  166    167    168    169    170    171    172    173    174    175    176    177    178    179    180    181    182    183    184    185    186    187    188    189    190    191    192    193    194    195    196    197    198    199    200    201    202    203    204    205    206    207    208    209    210    211    212    213    214    215    216    217    218    219    220    221    222    223    224    225    226    227    228    229    230    231    232    233    234    235    236    237    238    239    240    241    242  

 <         > 
Список директив: Core  |  ModRewrite  |  Lua  |  Proxy  |  SSL

Директива RewriteRule
  RU            EN  

Description:Defines rules for the rewriting engine
Syntax: RewriteRule Pattern Substitution [flags]
Context:server config, virtual host, directory, .htaccess
Override:FileInfo
Status:Extension
Module:mod_rewrite

Директива RewriteRule — настоящая рабочая лошадка по переписыванию. Директива может встречаться более одного раза, при этом каждый экземпляр определяет одно правило перезаписи. Порядок, в котором определены эти правила, важен — это порядок, в котором они будут применяться во время выполнения.

Шаблон представляет собой Perl-совместимое регулярное выражение . То, с чем сравнивается этот шаблон, зависит от того, где RewriteRule определена директива.

Что совпадает?

  • В VirtualHost контексте шаблон изначально будет сопоставляться с частью URL-адреса после имени хоста и порта и перед строкой запроса (например, «/app1/index.html»). Это (%-decoded) URL-путь.

  • В контексте каталога ( Directory и .htaccess) шаблон сопоставляется только с частичным путем, например, запрос «/app1/index.html» может привести к сравнению с «app1/index.html» или «index. html" в зависимости от того, где он RewriteRule определен.

    Путь к каталогу, в котором определено правило, удаляется из текущего сопоставленного пути файловой системы перед сравнением (до косой черты в конце включительно). Конечным результатом этого удаления префикса для каждого каталога является то, что правила в этом контексте совпадают только с частью текущего сопоставленного пути файловой системы «ниже», где определено правило.

    Директивы, такие как DocumentRoot и Alias , или даже результат предыдущих RewriteRule замен, определяют текущий отображаемый путь файловой системы.

  • Если вы хотите сопоставить имя хоста, порт или строку запроса, используйте a RewriteCond с переменными %{HTTP_HOST} , %{SERVER_PORT} или %{QUERY_STRING} соответственно.

Перезапись каталогов

  • Механизм перезаписи может использоваться в файлах .htaccess и в <Directory> разделах с некоторыми дополнительными сложностями.
  • Чтобы включить механизм перезаписи в этом контексте, вам необходимо установить " RewriteEngine On " и " Options FollowSymLinks " должны быть включены. Если ваш администратор отключил переопределение FollowSymLinks для пользовательского каталога, вы не сможете использовать механизм перезаписи. Это ограничение необходимо из соображений безопасности.
  • См. RewriteBase директиву для получения дополнительной информации о том, какой префикс будет добавлен обратно к относительным заменам.
  • Если вы хотите сопоставить полный URL-путь в RewriteRule для каждого каталога (htaccess), используйте переменную %{REQUEST_URI} в файле RewriteCond .
  • Удаленный префикс всегда заканчивается косой чертой, что означает, что сопоставление происходит со строкой, в которой никогда не было ведущей косой черты. Следовательно, шаблон с ^/ никогда не совпадает в контексте каталога.
  • Хотя правила перезаписи синтаксически разрешены в разделах <Location> и <Files> (включая их аналоги регулярных выражений), это никогда не должно быть необходимым и не поддерживается. Вероятной особенностью, которая может сломаться в этих контекстах, являются относительные замены.

Некоторые советы по регулярным выражениям см. во Введении к mod_rewrite.

В mod_rewrite символ НЕ (' ! ') также доступен в качестве возможного префикса шаблона. Это позволяет вам отрицать шаблон; сказать, например: « если текущий URL-адрес НЕ соответствует этому шаблону ». Это можно использовать в исключительных случаях, когда проще сопоставить отрицательный шаблон, или как последнее правило по умолчанию.

Примечание

При использовании символа NOT для отрицания шаблона вы не можете включать в этот шаблон сгруппированные части с подстановочными знаками. Это связано с тем, что, когда шаблон НЕ соответствует (т. е. совпадение отрицания), для групп нет содержимого. Таким образом, если используются инвертированные шаблоны, вы не можете использовать $N в строке подстановки!

Подстановка правила перезаписи — это строка, которая заменяет исходный URL -путь, совпавший с Pattern . Замена может быть :

путь файловой системы
Указывает расположение в файловой системе ресурса, который должен быть доставлен клиенту. Замены рассматриваются как путь в файловой системе, только если правило настроено в контексте сервера (виртуального хоста) и первый компонент пути в замене существует в файловой системе.
URL-путь
Относительный DocumentRoot путь к обслуживаемому ресурсу. Обратите внимание, что он mod_rewrite пытается угадать, указали ли вы путь к файловой системе или URL-путь, проверяя, существует ли первый сегмент пути в корне файловой системы. Например, если вы укажете строку подстановки /www/file.html , то она будет рассматриваться как URL-путь, если каталог с таким именем www не существует в корне или в вашей файловой системе (или, в случае использования перезаписей в файле .htaccess , относительно вашей root документа), и в этом случае он будет рассматриваться как путь файловой системы. Alias Если вы хотите , чтобы к результирующему URL-пути применялись другие директивы сопоставления URL-адресов (например, ), используйте [PT] флаг, как описано ниже.
Абсолютный URL
Если указан абсолютный URL-адрес, mod_rewrite проверяет, соответствует ли имя хоста текущему хосту. Если это так, схема и имя хоста удаляются, а результирующий путь рассматривается как URL-путь. В противном случае для данного URL выполняется внешнее перенаправление. Чтобы принудительно выполнить внешнее перенаправление обратно на текущий хост, см. [R] флаг ниже.
- (бросаться)
Прочерк указывает на то, что подстановку производить не следует (существующий путь передается нетронутым). Это используется, когда необходимо применить флаг (см. ниже) без изменения пути.

В дополнение к простому тексту строка замены может включать

  1. обратные ссылки ( $N ) на шаблон RewriteRule
  2. обратные ссылки ( %N ) на последний совпавший шаблон RewriteCond
  3. серверные переменные, как в тестовых строках условия правила ( %{VARNAME} )
  4. вызовы функции сопоставления ( ${mapname:key|default} )

Обратные ссылки — это идентификаторы вида $ N ( N =0..9), которые будут заменены содержимым N- й группы совпавшего Pattern . Серверные переменные такие же, как и для TestString директивы RewriteCond . Функции отображения взяты из RewriteMap директивы и объясняются там. Эти три типа переменных раскрываются в указанном выше порядке.

Правила перезаписи применяются к результатам предыдущих правил перезаписи в том порядке, в котором они определены в файле конфигурации. URL-путь или путь к файловой системе (см. «Что совпадает?», Выше) полностью заменяется заменой , и процесс перезаписи продолжается до тех пор, пока не будут применены все правила, или он явно не завершается флагом L или другим флагом. что подразумевает немедленное завершение, например END или F .

Изменение строки запроса

По умолчанию строка запроса передается без изменений. Однако вы можете создавать URL-адреса в строке подстановки, содержащей часть строки запроса. Просто используйте вопросительный знак внутри строки подстановки, чтобы указать, что следующий текст должен быть повторно введен в строку запроса. Если вы хотите стереть существующую строку запроса, завершите строку подстановки только вопросительным знаком. Чтобы объединить новые и старые строки запроса, используйте [QSA] флаг.

Кроме того, вы можете установить специальные действия, которые будут выполняться, добавив флаги в качестве третьего аргумента директивы . Флаги — это разделенный запятыми список, заключенный в квадратные скобки, любого из флагов в следующей таблице. Дополнительные сведения и примеры для каждого флага доступны в документе Rewrite Flags. [ ] RewriteRule

Флаг и синтаксис Функция
B Экранируйте небуквенно-цифровые символы в обратных ссылках перед применением преобразования. подробности ...
backrefnoplus|BNP Если обратные ссылки экранируются, пробелы следует экранировать до %20 вместо +. Полезно, когда обратная ссылка будет использоваться в компоненте пути, а не в строке запроса. подробности ...
chain|C Правило связано со следующим правилом. Если правило не выполняется, связанные с ним правила будут пропущены. подробности ...
cookie|CO=NAME:VAL Устанавливает куки в клиентском браузере. Полный синтаксис: CO= NAME : VAL : домен [: время жизни [: путь [: безопасный ] [: только http ]]]] подробности ...
discardpath|DPI Приводит к отбрасыванию части PATH_INFO переписанного URI. подробности ...
END Немедленно остановите процесс перезаписи и не применяйте больше никаких правил. Также предотвращает дальнейшее выполнение правил перезаписи для каждого каталога и контекста .htaccess. (Доступно в версии 2.3.9 и выше) подробности...
env|E=[!]VAR[:VAL] Приводит к установке переменной среды VAR (в значение VAL , если указано). Форма ! VAR приводит к сбросу переменной среды VAR . подробности ...
forbidden|F Возвращает ответ 403 FORBIDDEN браузеру клиента. подробности ...
gone|G Возвращает ответ 410 GONE браузеру клиента. подробности ...
Handler|H=Content-handler Вызывает отправку результирующего URI указанному обработчику содержимого для обработки. подробности ...
last|L Немедленно остановите процесс перезаписи и не применяйте больше никаких правил. Особо обратите внимание на предостережения для каждого каталога и контекста .htaccess (см. также флаг END). подробности ...
next|N Повторно запустите процесс перезаписи, начиная снова с первого правила, используя результат набора правил в качестве отправной точки. подробности ...
nocase|NC Делает сравнение шаблонов нечувствительным к регистру. подробности ...
noescape|NE Запрещает mod_rewrite применять экранирование специальных символов в шестнадцатеричном коде в результате перезаписи. подробности ...
nosubreq|NS Приводит к пропуску правила, если текущий запрос является внутренним подзапросом. подробности ...
proxy|P Принудительная внутренняя отправка URL-адреса подстановки в качестве прокси-запроса. подробности ...
passthrough|PT Принудительно передает результирующий URI обратно в механизм сопоставления URL-адресов для обработки других преобразователей URI в имена файлов, таких как Alias или Redirect . подробности ...
qsappend|QSA Добавляет любую строку запроса из исходного URL-адреса запроса к любой строке запроса, созданной в цели перезаписи. подробности ...
qsdiscard|QSD Отменить любую строку запроса, прикрепленную к входящему URI. подробности ...
qslast|QSL Интерпретируйте последний (самый правый) вопросительный знак как разделитель строки запроса, а не первый (самый левый), как обычно. Доступно в версии 2.4.19 и выше. подробности ...
redirect|R[=code] Вызывает внешнее перенаправление, возможно, с указанным кодом состояния HTTP. подробности ...
skip|S=num Сообщает механизму перезаписи пропустить следующее число правил, если текущее правило совпадает. подробности ...
type|T=MIME-type Заставьте MIME-тип целевого файла быть указанным типом. подробности ...

Расширение домашнего каталога

Когда строка подстановки начинается со строки, похожей на «/~user» (через явный текст или обратные ссылки), mod_rewrite выполняет расширение домашнего каталога независимо от наличия или конфигурации файла mod_userdir .

Это расширение не происходит, когда в директиве используется флаг PT RewriteRule .

Вот все возможные комбинации замен и их значения:

Внутри конфигурации для каждого сервера ( apache2.conf )
для запроса GET /somepath/pathinfo:

Данное правило Результирующая замена
^/somepath(.*) другой путь$1 недействительный, не поддерживается
^/somepath(.*) otherpath$1 [R] недействительный, не поддерживается
^/somepath(.*) otherpath$1 [P] недействительный, не поддерживается
^/somepath(.*) /otherpath$1 /другой путь/информация о пути
^/somepath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo через внешнее перенаправление
^/somepath(.*) /otherpath$1 [P] не имеет смысла, не поддерживается
^/somepath(.*) http://thishost/otherpath$1 /другой путь/информация о пути
^/somepath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfo через внешнее перенаправление
^/somepath(.*) http://thishost/otherpath$1 [P] не имеет смысла, не поддерживается
^/somepath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfo через внешнее перенаправление
^/somepath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo через внешнее перенаправление (флаг [R] избыточен)
^/somepath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo через внутренний прокси

Внутренняя конфигурация каждого каталога для /somepath
( /physical/path/to/somepath/.htaccess , with RewriteBase "/somepath" )
для запроса `` GET /somepath/localpath/pathinfo '':

Данное правило Результирующая замена
^localpath(.*) другой путь$1 /somepath/otherpath/pathinfo
^localpath(.*) другой путь$1 [R] http://thishost/somepath/otherpath/pathinfo через внешнее перенаправление
^localpath(.*) другой путь$1 [P] не имеет смысла, не поддерживается
^локальный путь(.*) /другой путь$1 /другой путь/информация о пути
^localpath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo через внешнее перенаправление
^localpath(.*) /otherpath$1 [P] не имеет смысла, не поддерживается
^localpath(.*) http://thishost/otherpath$1 /другой путь/информация о пути
^localpath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfo через внешнее перенаправление
^localpath(.*) http://thishost/otherpath$1 [P] не имеет смысла, не поддерживается
^localpath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfo через внешнее перенаправление
^localpath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo через внешнее перенаправление (флаг [R] избыточен)
^localpath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo через внутренний прокси
  RU            EN  


Рейтинг@Mail.ru