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

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

Description:Defines a condition under which rewriting will take place
Syntax: RewriteCond TestString CondPattern [flags]
Context:server config, virtual host, directory, .htaccess
Override:FileInfo
Status:Extension
Module:mod_rewrite

Директива RewriteCond определяет условие правила. Один или несколько RewriteCond могут предшествовать RewriteRule директиве. Затем следующее правило используется только в том случае, если текущее состояние URI соответствует его шаблону и выполняются эти условия.

TestString — это строка, которая может содержать следующие расширенные конструкции в дополнение к обычному тексту:

  • Обратные ссылки RewriteRule : это обратные ссылки в форме (0 <= N <= 9). От $1 до $9 обеспечивают доступ к сгруппированным частям (в скобках) шаблона, из которых действует текущий набор условий. $0 обеспечивает доступ ко всей строке, соответствующей этому шаблону. $N RewriteRule RewriteCond
  • Обратные ссылки RewriteCond : это обратные ссылки в форме (0 <= N <= 9). От %1 до %9 обеспечивают доступ к сгруппированным частям (опять же в скобках) шаблона, начиная с последнего совпадения в текущем наборе условий. %0 предоставляет доступ ко всей строке, соответствующей этому шаблону. %N RewriteCond
  • Расширения RewriteMap : Это расширения формы . См. документацию для RewriteMap для более подробной информации. ${mapname:key|default}
  • Server-Variables : это переменные формы NAME_OF_VARIABLE , где NAME_OF_VARIABLE может быть строкой, взятой из следующего списка: %{ }
    Заголовки HTTP: подключение и запрос:
    HTTP_ACCEPT
    HTTP_COOKIE
    HTTP_FORWARDED
    HTTP_HOST
    HTTP_PROXY_CONNECTION
    HTTP_REFERER
    HTTP_USER_AGENT
    AUTH_TYPE
    CONN_REMOTE_ADDR
    CONTEXT_PREFIX
    CONTEXT_DOCUMENT_ROOT
    IPV6
    PATH_INFO
    QUERY_STRING
    REMOTE_ADDR
    REMOTE_HOST
    REMOTE_IDENT
    REMOTE_PORT
    REMOTE_USER
    REQUEST_METHOD
    SCRIPT_FILENAME
    внутренности сервера: Дата и время: специальные предложения:
    DOCUMENT_ROOT
    SCRIPT_GROUP
    SCRIPT_USER
    SERVER_ADDR
    SERVER_ADMIN
    SERVER_NAME
    SERVER_PORT
    SERVER_PROTOCOL
    SERVER_SOFTWARE
    TIME_YEAR
    TIME_MON
    TIME_DAY
    TIME_HOUR
    TIME_MIN
    TIME_SEC
    TIME_WDAY
    TIME
    API_VERSION
    CONN_REMOTE_ADDR
    HTTPS
    IS_SUBREQ
    REMOTE_ADDR
    REQUEST_FILENAME
    REQUEST_SCHEME
    REQUEST_URI
    THE_REQUEST

    Все эти переменные соответствуют одноименным заголовкам HTTP MIME, переменным C HTTP-сервера Apache или struct tm полям системы Unix. Большинство из них задокументированы здесь или где-либо в Руководстве или в спецификации CGI.

    SERVER_NAME и SERVER_PORT зависят от значений UseCanonicalName и UseCanonicalPhysicalPort соответственно.

    Те, которые являются специальными для mod_rewrite, включают приведенные ниже.

    API_VERSION
    Это версия API модуля Apache httpd (внутренний интерфейс между сервером и модулем) в текущей сборке httpd, как определено в include/ap_mmn.h. Версия API модуля соответствует используемой версии Apache httpd (например, в релизной версии Apache httpd 1.3.14 это 19990320:10), но в основном представляет интерес для авторов модулей.
    CONN_REMOTE_ADDR
    Начиная с версии 2.4.8: одноранговый IP-адрес соединения (см. модуль mod_remoteip ).
    HTTPS
    Будет содержать текст «включено», если соединение использует SSL/TLS, или «выключено» в противном случае. (Эту переменную можно безопасно использовать независимо от того, mod_ssl загружена она или нет).
    IS_SUBREQ
    Будет содержать текст «true», если обрабатываемый в данный момент запрос является подзапросом, «false» в противном случае. Подзапросы могут генерироваться модулями, которым необходимо разрешать дополнительные файлы или URI для выполнения своих задач.
    REMOTE_ADDR
    IP-адрес удаленного хоста (см. модуль mod_remoteip ).
    REQUEST_FILENAME
    REQUEST_FILENAME Указывается полный путь локальной файловой системы к файлу или сценарию, соответствующему запросу, если он уже был определен сервером в то время . В противном случае, например, при использовании в контексте виртуального хоста, то же значение, что и REQUEST_URI . В зависимости от значения AcceptPathInfo сервер мог использовать только некоторые ведущие компоненты для REQUEST_URI сопоставления запроса с файлом.
    REQUEST_SCHEME
    Будет содержать схему запроса (обычно "http" или "https"). На это значение можно повлиять с помощью ServerName .
    REQUEST_URI
    Компонент пути запрошенного URI, например "/index.html". В частности, это исключает строку запроса, которая доступна как собственная переменная с именем QUERY_STRING .
    THE_REQUEST
    Полная строка HTTP-запроса, отправляемая браузером на сервер (например, " GET /index.html HTTP/1.1 "). Сюда не входят дополнительные заголовки, отправляемые браузером. Это значение не было экранировано (декодировано), в отличие от большинства других переменных ниже.

Если TestString имеет специальное значение expr , CondPattern будет рассматриваться как ap_expr. Заголовки HTTP, указанные в выражении, будут добавлены к заголовку Vary, если флаг novary не задан.

Другие вещи, о которых вы должны знать:

  1. Переменные SCRIPT_FILENAME и REQUEST_FILENAME содержат одно и то же значение — значение поля filename внутренней request_rec структуры Apache HTTP Server. Первое имя — общеизвестное имя переменной CGI, а второе — соответствующий аналог REQUEST_URI (который содержит значение поля uri ) request_rec .

    Если подстановка произошла и перезапись продолжается, значение обеих переменных будет соответствующим образом обновлено.

    При использовании в контексте для каждого сервера ( т. е . до сопоставления запроса с файловой системой) SCRIPT_FILENAME и REQUEST_FILENAME не могут содержать полный путь к локальной файловой системе, поскольку на данном этапе обработки путь неизвестен. В этом случае обе переменные изначально будут содержать значение REQUEST_URI. Чтобы получить полный путь запроса в локальной файловой системе в контексте каждого сервера, используйте упреждающий просмотр на основе URL, %{LA-U:REQUEST_FILENAME} чтобы определить окончательное значение REQUEST_FILENAME.

  2. %{ENV:variable} , где переменная может быть любой переменной среды. Это просматривается через внутренние структуры Apache httpd и (если не найдено там) через getenv() серверный процесс Apache httpd.
  3. %{SSL:variable} , где переменная — это имя переменной среды SSL, может использоваться независимо от того, mod_ssl загружена она или нет, но в противном случае всегда будет заменяться пустой строкой. Пример: %{SSL:SSL_CIPHER_USEKEYSIZE} может расширяться до 128 . Эти переменные доступны даже без установки StdEnvVars опции директивы SSLOptions .
  4. %{HTTP:header} , где header может быть любым именем HTTP MIME-заголовка, всегда можно использовать для получения значения заголовка, отправленного в HTTP-запросе. Пример: %{HTTP:Proxy-Connection} значение HTTP-заголовка `` Proxy-Connection: ''.

    Если заголовок HTTP используется в условии, этот заголовок добавляется к заголовку Vary ответа на случай, если условие оценивается как истинное для запроса. Он не добавляется, если условие оценивается как ложное для запроса. Добавление заголовка HTTP к заголовку Vary ответа необходимо для правильного кэширования.

    Следует иметь в виду, что условия следуют логике короткого замыкания в случае флага ' ', так что некоторые условия могут вообще не оцениваться. ornext|OR

  5. %{LA-U:variable} может использоваться для опережающего просмотра, который выполняет внутренний (на основе URL) подзапрос для определения конечного значения переменной . Это можно использовать для доступа к переменной для перезаписи, которая недоступна на текущем этапе, но будет установлена на более позднем этапе.

    Например, для перезаписи в соответствии с REMOTE_USER переменной из контекста сервера ( apache2.conf файла), которую вы должны использовать %{LA-U:REMOTE_USER} , эта переменная устанавливается фазами авторизации, которые идут после фазы преобразования URL (во время которой работает mod_rewrite).

    С другой стороны, поскольку mod_rewrite реализует свой контекст для каждого каталога ( .htaccess файл) через фазу исправления API и поскольку фазы авторизации предшествуют этой фазе, вы просто можете использовать %{REMOTE_USER} в этом контексте.

  6. %{LA-F:variable} может использоваться для выполнения внутреннего (на основе имени файла) подзапроса, чтобы определить окончательное значение переменной . В большинстве случаев это то же самое, что и LA-U выше.

CondPattern — это шаблон условия, регулярное выражение, которое применяется к текущему экземпляру TestString . TestString сначала оценивается, а затем сопоставляется с CondPattern .

CondPattern обычно является Perl-совместимым регулярным выражением , но есть дополнительный синтаксис для выполнения других полезных тестов для Teststring :

  1. Вы можете поставить перед строкой шаблона ! символ ' ' (восклицательный знак), чтобы отменить результат условия, независимо от того, какой тип CondPattern используется.
  2. Вы можете выполнять лексикографические сравнения строк:
    <CondPattern
    Лексикографически предшествует
    Обрабатывает CondPattern как простую строку и сравнивает его лексикографически с TestString . True, если TestString лексикографически предшествует CondPattern .
    >CondPattern
    Лексикографически следует
    Обрабатывает CondPattern как простую строку и сравнивает его лексикографически с TestString . True, если TestString лексикографически следует за CondPattern .
    =CondPattern
    Лексикографически равный
    Обрабатывает CondPattern как простую строку и сравнивает его лексикографически с TestString . Истина, если TestString лексикографически равна CondPattern (две строки точно равны, символ за символом). Если CondPattern ( "" две кавычки), это сравнивает TestString с пустой строкой.
    <=CondPattern
    Лексикографически меньше или равно
    Обрабатывает CondPattern как обычную строку и лексикографически сравнивает его с TestString . Истина, если TestString лексикографически предшествует CondPattern или равна CondPattern (две строки равны, символ за символом).
    >=CondPattern
    Лексикографически больше или равно
    Обрабатывает CondPattern как простую строку и сравнивает его лексикографически с TestString . Истинно, если TestString лексикографически следует за CondPattern или равен CondPattern (две строки равны, символ за символом).
  3. Вы можете выполнять целочисленные сравнения:
    -eq
    Численно равно TestString считается целым числом и численно сравнивается
    с CondPattern . Истинно, если они численно равны.
    -ge
    Числовое значение больше или равно TestString рассматривается как целое число и сравнивается с CondPattern . Истинно, если TestString численно больше или равен CondPattern .
    -gt
    Численно больше , чем
    TestString обрабатывается как целое число и численно сравнивается с CondPattern . Истинно, если TestString численно больше, чем CondPattern .
    -le
    Числовое значение меньше или равно TestString рассматривается как целое число и численно сравнивается с CondPattern . Истинно, если TestString численно меньше или равен CondPattern . Избегайте путаницы с -l , используя вариант -L или -h .
    -lt
    Числовое значение меньше , чем TestString
    обрабатывается как целое число и сравнивается с CondPattern . Истинно, если TestString численно меньше, чем CondPattern . Избегайте путаницы с -l , используя вариант -L или -h .
    -ne
    Численно не равно TestString обрабатывается как целое число и численно сравнивается
    с CondPattern . Истинно, если они численно различны. Это эквивалентно . !-eq
  4. Вы можете выполнять различные проверки атрибутов файла:
    -d
    Это каталог .
    Рассматривает TestString как путь и проверяет, существует ли он и является ли он каталогом.
    -f
    Является обычным файлом .
    Рассматривает TestString как путь и проверяет, существует ли он или нет, и является ли он обычным файлом.
    -F
    Существующий файл через подзапрос.
    Проверяет, является ли TestString допустимым файлом, доступным через все сконфигурированные в данный момент элементы управления доступом сервера для этого пути. Для проверки используется внутренний подзапрос, поэтому используйте его с осторожностью — это может повлиять на производительность вашего сервера!
    -h
    Является символической ссылкой, соглашением bash.
    См. .
    -l
    Является символической ссылкой .
    Рассматривает TestString как путь и проверяет, существует ли он или нет, и является ли он символической ссылкой. Также можно использовать соглашение bash -L или -h , если есть вероятность путаницы, например, при использовании тестов -lt или -le .
    -L
    Является символической ссылкой, соглашением bash.
    См. -l .
    -s
    Обычный файл, с размером .
    Рассматривает TestString как путь и проверяет, существует ли он или нет, и является ли он обычным файлом с размером больше нуля.
    -U

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

    Этот флаг возвращает информацию только о таких вещах, как контроль доступа, аутентификация и авторизация. Этот флаг не возвращает информацию о коде состояния, который должен был вернуть сконфигурированный обработчик (статический файл, CGI, прокси и т. д.).

    -x
    Имеет права на исполняемый файл .
    Рассматривает TestString как путь и проверяет, существует ли он, и имеет ли права на выполнение. Эти разрешения определяются в соответствии с базовой ОС.
    Например:
    RewriteCond /var/www/%{REQUEST_URI} !-f
    RewriteRule ^(.+) /other/archive/$1 [R]
  5. Если TestString имеет специальное значение expr , CondPattern будет рассматриваться как ap_expr.

    В приведенном ниже примере -strmatch используется для сравнения REFERER с именем хоста сайта, чтобы заблокировать нежелательные хотлинки.

    RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"
    RewriteRule "^/images" "-" [F]

Вы также можете установить специальные флаги для CondPattern , добавив flags в качестве третьего аргумента к директиве, где flags — это список, разделенный запятыми, любого из следующих флагов: [ ] RewriteCond

  • nocase|NC (nocase)
    Это делает тест нечувствительным к регистру — различия между 'AZ' и 'az' игнорируются как в расширенной TestString , так и в CondPattern . Этот флаг действует только для сравнения между TestString и CondPattern . Это не влияет на проверку файловой системы и подзапросов. nocase|NC
  • 'ornext|OR' (or next condition)
    Используйте это, чтобы объединить условия правила с локальным ИЛИ вместо неявного И. Типичный пример: без этого флага вам пришлось бы написать пару условие/правило три раза. ornext|OR
    RewriteCond "%{REMOTE_HOST}" "^host1" [OR]
    RewriteCond "%{REMOTE_HOST}" "^host2" [OR]
    RewriteCond "%{REMOTE_HOST}" "^host3"
    RewriteRule ...some special stuff for any of these hosts...
  • 'novary|NV' (no vary)
    Если в условии используется заголовок HTTP, этот флаг предотвращает добавление этого заголовка к заголовку Vary ответа. Использование этого флага может нарушить правильное кэширование ответа, если представление этого ответа зависит от значения этого заголовка. Таким образом, этот флаг следует использовать только в том случае, если значение заголовка Vary хорошо понятно. novary|NV

Пример:

Чтобы переписать главную страницу сайта в соответствии с User-Agent: заголовком запроса, вы можете использовать следующее:

RewriteCond "%{HTTP_USER_AGENT}" "(iPhone|Blackberry|Android)"
RewriteRule "^/$" "/homepage.mobile.html" [L]
RewriteRule "^/$" "/homepage.std.html" [L]

Объяснение: если вы используете браузер, который идентифицирует себя как мобильный браузер (обратите внимание, что пример неполный, так как существует множество других мобильных платформ), обслуживается мобильная версия домашней страницы. В противном случае обслуживается стандартная страница.

  RU            EN  


Рейтинг@Mail.ru