<-
Apache > HTTP Server > Documentation > Version 2.0 > Modules

Apache Модуль mod_rewrite

Description: обеспечивает двигатель переписывания на основе правила, чтобы переписать требуемые URL на лету
Status: расширение
Module Identifier: rewrite_module
Source File: mod_rewrite.c
Compatibility: доступный в Apacheе 1.3 и позже

резюме

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

этот модуль работает на полных URL (включая часть информации дорожки) обоими во в-сервер контексте ( httpd.conf ) и в-справочник контекст ( .htaccess ) и может произвести части вереницы вопроса на результате. Переписанный результат может привести к внутренней подобработке, внешнему переназначению запроса или даже к внутренней пропускной способности по доверенности.

дальнейшие детали, обсуждение, и примеры, обеспечиваются в detailed mod_rewrite documentation .

директивы

темы

top

API Phases

Apache обрабатывает запрос HTTP в нескольких фазах. Крюк для каждой из этих фаз обеспечивается Apacheским программным интерфейсом приложения. mod_rewrite использования два из этих крюков: крюк перевода URL-К-ИМЕНИ-ФАЙЛА (используемый после того, как запрос HTTP был прочитан, но перед любыми запусками разрешения) и крюком Fixup (вызванный после фаз разрешения, и после в-справочник config файлов ( .htaccess ) были прочитаны, но прежде, чем довольный тренер активизирован).

как только запрос входит, и Apache определил соответствующий сервер (или действительный сервер), переписывающийся двигатель начинает перевод URL-К-ИМЕНИ-ФАЙЛА, обрабатывая mod_rewrite директивы от в-сервер конфигурации. Несколько шагов позже, когда заключительные справочники данных найдены, в-справочник директивы конфигурации mod_rewrite, вызваны в фазе Fixup.

top

Ruleset Processing

когда mod_rewrite вызван в течение этих двух фаз программного интерфейса приложения, это читает уместный rulesets от его структуры конфигурации (который был или создан на запуске, для в-сервер контекста, или в течение директивного пересечения для в-справочник контекста). URL, переписывая двигатель начат с соответствующего ruleset (одно или более правил вместе с их условиями), и его операция - точно то же самое для обоих контекстов конфигурации. Только заключительная обработка результата отлична.

заказ правил в ruleset важен, потому что переписывающийся двигатель обрабатывает их в детали (не всегда очевидный) заказ, следующим образом: переписывающиеся машинные петли через rulesets (каждый ruleset быть составленным из RewriteRule директивы, с или без RewriteCond s), управляйте по правилу. Когда специфическое правило подобрано, mod_rewrite также проверяет соответствующие условия ( RewriteCond директивы). По историческим причинам условия даются сначала, делая поток контроля, немного многоречивый. См. иллюстрацию 1 для большего количества деталей.

[Needs graphics capability to display]
иллюстрация 1: поток контроля переписывающегося двигателя через переписывание ruleset

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

если RewriteCond s существуют, внутренняя петля начата, обрабатывая их в заказе, что они перечислены. Условия не подобраны против текущего URL непосредственно. A TestString построен, расширяя переменные, заднюю-часть-ссылки, поиски карты, и т.д., против который CondPattern подобран. Если образец не в состоянии соответствовать одному из условий, полный набор правила и связанных условий терпит неудачу. Если образец соответствует данному условию, то соответствие продолжается к следующему условию, пока не больше условий не доступно. Если все условия соответствуют, обработка продолжена с заменой замена вереница для URL.

top

Regex Back-Reference Availability

Используя круглые скобки в образец или в одном из CondPattern s заставляет заднюю-часть-ссылки быть внутренне созданной. На них можно позже сослаться, используя вереницы $N и %N (см. ниже), чтобы создавать замена и TestString вереницы. Иллюстрация 2 пытается показать, как задняя-часть-ссылки передана через процесс для более позднего расширения.

[Needs graphics capability to display]
иллюстрация 2: поток задней-части-ссылки через правило.

top

Quoting Special Characters

на Apacheа 1.3.20, специальные характеры в TestString и замена верениц можно избежать (то есть, рассмотреться как нормальные характеры без их обычного специального значения), предустанавливая их с разрезом ('\') характер. Другими словами, Вы можете включить фактический характер долларового признака в a замена вереница при использовании ' \$ '; это препятствует mod_rewrite пробовать рассмотреть это как backreference.

top

Environment Variables

этот модуль держит след двух дополнительных (нестандартных) переменных окружающей среды CGI/SSI названным SCRIPT_URL и SCRIPT_URI . они содержат логичный представление сети к текущему ресурсу, в то время как стандартные переменные CGI/SSI SCRIPT_NAME и SCRIPT_FILENAME содержать физический представление системы.

заметить: Эти переменные держат ТУРОВ/URL поскольку их первоначально требовали , то есть, прежде любое переписывание. Это важно отметить, потому что процесс переписывания прежде всего используется, чтобы переписать логические URL к физическим именам пути.

Example

SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html SCRIPT_FILENAME=/u/rse/.www/index.html SCRIPT_URL=/u/rse/ SCRIPT_URI=http://en1.engelschall.com/u/rse/
top

Practical Solutions

для многочисленных примеров обычных, и "не столь обычный", использования для mod_rewrite, см. Rewrite Guide , и Advanced Rewrite Guide документы.

top

RewriteBase Directive

Description: устанавливает базовый унифицированный указатель информационного ресурса для в-справочник, переписывает
Syntax: RewriteBase URL-path
Default: See usage for information.
Context: справочник, .htaccess
Override: FileInfo
Status: расширение
Module: mod_rewrite

RewriteBase директива явно устанавливает базовый унифицированный указатель информационного ресурса для в-справочник, переписывает. Поскольку Вы будете видеть ниже, RewriteRule может использоваться во в-справочник config файлах ( .htaccess ). В таком случае, это будет действовать в местном масштабе, раздевая местную директивную приставку перед обработкой, и применение переписывает правила только к остатку. Когда обработка полна, приставка автоматически добавлена назад к дорожке. Урегулирование по умолчанию-; RewriteBase физическая директивная дорожка

когда замена происходит для нового URL, этот модуль должен повторно ввести URL в обработку сервера. Чтобы быть в состоянии сделать это, это должно знать, какова соответствующая ПРИСТАВКА URL или ОСНОВА URL. По умолчанию эта приставка - передача filepath непосредственно. однако, для большинства вебсайтов, URL непосредственно не связаны с физическими дорожками имени файла, таким образом это предположение часто будет неправильно! поэтому, Вы можете использовать RewriteBase директива, чтобы определить правильную ПРИСТАВКУ URL.

если URL вашего webserver нет непосредственно связанный с физическими дорожками файла, Вы будете должны использовать RewriteBase в каждом .htaccess файл, где Вы хотите использовать RewriteRule директивы.

например, примите следующий в-справочник config файл:

# # /abc/def/.htaccess -- per-dir config file for directory /abc/def # Remember: /abc/def is the physical path of /xyz,

i.e.

, the server # has a 'Alias /xyz /abc/def' directive

e.g.

# RewriteEngine On # let the server know that we were reached via /xyz and not # via the physical path prefix /abc/def RewriteBase /xyz # now the rewriting rules RewriteRule ^oldstuff\.html$ newstuff.html

в вышеупомянутом примере, запрос к /xyz/oldstuff.html правильно переписан к физическому файлу /abc/def/newstuff.html .

для Apacheских Хакеров

следующий список дает подробную информацию о внутренних шагах обработки:

запрос: /xyz/oldstuff.html Внутренняя Обработка: /xyz/oldstuff.html -> /abc/def/oldstuff.html (в-сервер Псевдоним) /abc/def/oldstuff.html -> /abc/def/newstuff.html (в-директора RewriteRule) /abc/def/newstuff.html -> /xyz/newstuff.html (в-директора RewriteBase) /xyz/newstuff.html -> /abc/def/newstuff.html (в-сервер Псевдоним) Результат: /abc/def/newstuff.html

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

top

RewriteCond Directive

Description: определяет условие, при котором будет иметь место переписывание
Syntax: RewriteCond TestString CondPattern
Context: сервер config, действительный хозяин, справочник, .htaccess
Override: FileInfo
Status: расширение
Module: mod_rewrite

RewriteCond директива определяет условие правила. Один или больше RewriteCond может предшествовать a RewriteRule директива. Следующее правило тогда только используется, если оба текущее состояние ТУРОВ соответствуют его образцу, и если эти условия встречены.

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

другие вещи Вы должны знать:

  1. переменные SCRIPT_FILENAME и REQUEST_FILENAME содержат ту же самую ценность - ценность filename область внутреннего request_rec структура Apacheского сервера. Имя - обычно известное переменное название CGI, в то время как второе - соответствующая копия REQUEST_URI (который содержит ценность uri область request_rec ).
  2. %{ENV:variable} , где переменная может быть любая переменная окружающей среды, является также доступным. Это наверх смотрится через внутренние Apacheские структуры и (если не найденным там) через getenv() от Apacheского процесса сервера.
  3. %{SSL:variable} , где переменная является названием SSL environment variable , может использоваться действительно ли mod_ssl загружен, но будет всегда расширяться к пустой веренице, если это не. Пример: %{SSL:SSL_CIPHER_USEKEYSIZE} может расшириться к 128 .
  4. %{HTTP:header} , где удар головой может быть любое название УДАРА ГОЛОВОЙ ПАНТОМИМЫ HTTP, может всегда использоваться, чтобы получить ценность удара головой, посланного в запросе HTTP. Пример: %{HTTP:Proxy-Connection} является ценностью удара головой HTTP " Proxy-Connection: ".
  5. %{LA-U:variable} может использоваться для предвидений, которые выполняют внутренний подзапрос (НА ОСНОВЕ URL) определить финал ценность переменная . это может использоваться, чтобы получить доступ к переменной для того, чтобы переписать, который не доступен в потоке стадия, но будет установлен в более поздней фазе.

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

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

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

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

помнить: CondPattern является a perl совместимое регулярное выражение с некоторыми дополнениями:

  1. Вы можете приставка вереница образца с ' ! 'характер (восклицательный знак), чтобы определить a нет - соответствие образцу.
  2. есть некоторые специальные варианты CondPatterns . вместо реальных регулярных верениц выражения Вы можете также использовать одно из следующего:
    • ' <CondPattern '(лексикографически предшествует),
      рассматривает CondPattern как простая вереница и сравнивает это лексикографически с TestString . верный, если TestString лексикографически предшествует CondPattern .
    • ' >CondPattern '(лексикографически следует),
      рассматривает CondPattern как простая вереница и сравнивает это лексикографически с TestString . верный, если TestString лексикографически следует CondPattern .
    • ' =CondPattern '(лексикографически равный)
      рассматривает CondPattern как простая вереница и сравнивает это лексикографически с TestString . верный, если TestString является лексикографически равным CondPattern (две вереницы точно равны, характер для характера). Если CondPattern "" (две кавычки), это сравнивается TestString к пустой веренице.
    • ' -d '( d irectory)
      рассматривает TestString как имя пути и тесты, действительно ли это существует, и - справочник.
    • ' -f '(является регулярным f ile)
      рассматривает TestString как имя пути и тесты, действительно ли это существует, и - регулярный файл.
    • ' -s '(-регулярный файл, с s ize)
      рассматривает TestString как имя пути и тесты, действительно ли это существует, и - регулярный файл с размером, больше чем ноль.
    • ' -l '(является символическим l чернила)
      рассматривает TestString как имя пути и тесты, действительно ли это существует, и - символическая связь.
    • ' -F '(существует файл, через подзапрос),
      чеки, действительно ли TestString является действительным файлом, доступным через в-настоящее-время-формируемые средства управления доступа всего сервера для той дорожки. Это использует внутренний подзапрос сделать чек, столь использовать это с заботой - это может воздействовать на работу вашего сервера!
    • ' -U '(существует URL, через подзапрос),
      чеки, действительно ли TestString является действительным URL, доступным через в-настоящее-время-формируемые средства управления доступа всего сервера для той дорожки. Это использует внутренний подзапрос сделать чек, столь использовать это с заботой - это может воздействовать на работу вашего сервера!

    отметить

    все эти тесты могут также быть предустановлены восклицательным знаком ('!'), чтобы отрицать их значение.
  3. Вы можете также установить специальные флаги для CondPattern прилагая [ флаги ] как третий аргумент RewriteCond директива, где флаги является отделенным запятой списком любого из следующих флагов:
    • ' nocase|NC '( n o c ase)
      это делает тест нечувствительным к случаю - различия между 'A-Z' и 'a-z' игнорируются, оба в расширенном TestString и CondPattern . этот флаг эффективен только для сравнений между TestString и CondPattern . это не имеет никакого эффекта на чеки подзапроса и файловую систему.
    • ' 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...
      
      без этого флага Вы должны были бы написать паре условия/правила три раза.

пример:

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

RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteRule ^/$ /homepage.max.html [L] RewriteCond %{HTTP_USER_AGENT} ^Lynx.* RewriteRule ^/$ /homepage.min.html [L] RewriteRule ^/$ /homepage.std.html [L]

объяснение: Если Вы используете браузер, который идентифицирует себя как 'Mozilla' (включая Навигатора Netscape, Mozilla и т.д), то Вы получаете начальную страницу Макса (который мог включить структуры, или другие специальные особенности). Если Вы используете браузер Рыси (который является на основе терминала), то Вы получаете начальную страницу минуты (который мог быть версией, разработанной для легкого, просмотра только для текста). Если ни одно из этих условий не применяется (Вы используете любой другой браузер, или ваш браузер идентифицирует себя как кое-что нестандартное), Вы получаете станд. (стандарт) начальная страница.

top

RewriteEngine Directive

Description: позволяет или повреждает время выполнения, переписывая двигатель
Syntax: RewriteEngine on|off
Default: RewriteEngine off
Context: сервер config, действительный хозяин, справочник, .htaccess
Override: FileInfo
Status: расширение
Module: mod_rewrite

RewriteEngine директива позволяет или повреждает время выполнения, переписывая двигатель. Если это собирается off этот модуль не делает никакой обработки времени выполнения вообще. Это даже не обновляет SCRIPT_URx переменные окружающей среды.

использовать эту директиву, чтобы повредить модуль вместо того, чтобы комментировать весь RewriteRule директивы!

отметить, что, по умолчанию, переписывают конфигурации, не унаследованы. Это означает, что Вы должны иметь a RewriteEngine on директива для каждого действительного хозяина, в котором Вы желаете использовать это.

top

RewriteLock Directive

Description: устанавливает название файла замка, используемого для RewriteMap синхронизация
Syntax: RewriteLock file-path
Context: сервер config
Status: расширение
Module: mod_rewrite

эта директива устанавливает имя файла для синхронизации lockfile, с которым должен общаться mod_rewrite RewriteMap программы . устанавливают этот lockfile в местную дорожку (не на УСТАНОВЛЕННОМ NFS устройстве), когда Вы хотите использовать программу карты переписывания. Это не требуется для других типов переписывания карт.

top

RewriteLog Directive

Description: наборы название файла, используемого для заготовки леса переписывают машинную обработку
Syntax: RewriteLog file-path
Context: сервер config, действительный хозяин
Status: расширение
Module: mod_rewrite

RewriteLog директива устанавливает название файла, к которому сервер регистрирует любые действия переписывания, которые это выполняет. Если название не начинается с разреза (' / '), тогда это, как предполагают, является относительно Корень Сервера . директива должна произойти только однажды в сервер config.

чтобы повредить заготовку леса переписывания действий, не рекомендуют установить имя файла к /dev/null , потому что, хотя двигатель переписывания не делает тогда продукцию к logfile, это все еще создает logfile продукцию внутренне. это замедлит сервер без преимущества для администратора! повредить заготовку леса или удалять или комментируют RewriteLog директива или использование RewriteLogLevel 0 !

безопасность

см. Apache Security Tips документ для деталей на том, как ваша безопасность могла быть поставлена под угрозу, если справочник, где logfiles сохранены, перезаписываем любым кроме пользователя, который начинает сервер.

Example

RewriteLog "/usr/local/var/apache/logs/rewrite.log"

top

RewriteLogLevel Directive

Description: устанавливает многословие файла системного журнала, используемого переписывающимся двигателем
Syntax: RewriteLogLevel Level
Default: RewriteLogLevel 0
Context: сервер config, действительный хозяин
Status: расширение
Module: mod_rewrite

RewriteLogLevel директива устанавливает уровень многословия переписывания logfile. Уровень по умолчанию 0 средств никакая заготовка леса, в то время как 9 или больше средств, что фактически все действия зарегистрированы.

повредить заготовку леса переписывания действий просто набор уровень к 0. Это повреждает, все переписывают регистрации действия.

Используя высокую ценность для уровень замедлит ваш Apache сервер драматично! Используйте переписывание logfile в a уровень больше чем 2 только для отладки!

Example

RewriteLogLevel 3

top

RewriteMap Directive

Description: определяет функцию картографии для ключевого поиска
Syntax: RewriteMap MapName MapType : MapSource
Context: сервер config, действительный хозяин
Status: расширение
Module: mod_rewrite
Compatibility: выбор различных типов dbm доступен в Apacheе 2.0.41 и позже

RewriteMap директива определяет a Переписывание Карты который может использоваться в вереницах замены правила функциями картографии к областям insert/substitute через ключевой поиск. Источник этого поиска может иметь различные типы.

MapName является названием карты и будет использоваться, чтобы определить функцию картографии для верениц замены правила переписывания через одну из следующих конструкций:

${ MapName : LookupKey }
${ MapName : LookupKey | DefaultValue }

когда такая конструкция происходит, карта MapName консультируется и ключ LookupKey наверх смотрится. Если ключ найден, конструкцией функции карты заменяют SubstValue . если ключ не найден тогда, что этим заменяют DefaultValue или пустой вереницей, если нет DefaultValue был определен.

например, Вы могли бы определить a RewriteMap как:

RewriteMap examplemap txt:/path/to/file/map.txt

Вы тогда были бы в состоянии использовать эту карту в a RewriteRule следующим образом:

RewriteRule ^/ex/(.*) ${examplemap:$1}

следующие комбинации для MapType и MapSource может использоваться:

RewriteMap директива может произойти не раз. Поскольку каждая функция картографии используют тот RewriteMap директива, чтобы объявить ее переписывание mapfile. В то время как Вы не можете объявить карта во в-справочник контексте это конечно возможно к использование эта карта во в-справочник контексте.

отметить

поскольку простой формат текста и DBM регистрирует наверх выглядевшие ключи, прячутся про запас в-ядре до mtime из изменений mapfile или сервера делает переначало. Этим путем Вы можете иметь функции карты в правилах, которые используются для каждый запрос. Это не никакая проблема, потому что внешний поиск только случается однажды!
top

RewriteOptions Directive

Description: наборы некоторые специальные варианты для переписывающегося двигателя
Syntax: RewriteOptions Options
Default: RewriteOptions MaxRedirects=10
Context: сервер config, действительный хозяин, справочник, .htaccess
Override: FileInfo
Status: расширение
Module: mod_rewrite
Compatibility: MaxRedirects является доступным в Apacheе 2.0.45 и позже

RewriteOptions директива устанавливает некоторые специальные варианты для текущей в-сервер или в-справочник конфигурации. выбор вереницы могут быть одним из следующего:

inherit
это вынуждает текущую конфигурацию наследовать конфигурацию родителя. В контексте "в действительный сервер" это означает, что карты, условия и правила главного сервера унаследованы. Во в-справочник контексте это означает что условия и правила родительского справочника .htaccess конфигурация унаследована.
MaxRedirects= number
чтобы предотвращать бесконечные петли внутренних переадресовывает выпущенный в-справочник RewriteRule s, mod_rewrite прерывается запрос после достижения максимального числа такого переадресовывает и отвечает 500 Внутренними Ошибками Сервера. Если Вы действительно нуждаетесь более внутренний, переадресовывает чем 10 в запрос, Вы можете увеличить неплатеж к желательной ценности.
top

RewriteRule Directive

Description: определяет правила для двигателя переписывания
Syntax: RewriteRule Pattern Substitution
Context: сервер config, действительный хозяин, справочник, .htaccess
Override: FileInfo
Status: расширение
Module: mod_rewrite
Compatibility: флаг печенья доступен в Apacheе 2.0.40 и позже.

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

Pattern является perl совместимым regular expression , который применен к текущему URL. "Поток" означает ценность URL, когда это правило применено. Это, возможно, не первоначально требуемый URL, который, возможно, уже соответствовал предыдущему правилу, и быть изменен.

некоторые намеки на синтаксисе регулярных выражений:


текст:



.


любой единственный характер


[


случайные работы


]


класс характера: Любой характер класса "случайные работы"


[^


случайные работы


]


класс характера: Не характер класса "случайные работы" text1


|


Альтернатива text2: text1 или text2

кванторы:



?


0 или 1 возникновение предыдущего текста


*


0 или возникновения N предыдущего текста (N > 0)


+


1 или возникновения N предыдущего текста (N > 1)

группировка:



(


текст


)


группировка текста (используемый или установить границы альтернативы как выше, или сделать backreferences, где

N

группа th может быть упомянута на RHS RewriteRule как

$


N

)

якоря:



^


якорь начала-линии


$


якорь конца-линии

возможность избежать:



\


спасение случайной работы данная случайная работа (например, чтобы определить случайные работы "

.[]()

"

и т.д.

)

за дополнительной информацией о регулярных выражениях, взгляните на perl регулярное выражение manpage (" perldoc perlre "). Если Вы интересуетесь большим количеством подробной информации о регулярных выражениях и их вариантах (POSIX regex и т.д.), следующая книга посвящена этой теме:

Справляясь с Регулярными Выражениями, 2-ым Выпуском
Джеффри Э.ф. Friedl
O'Reilly & Associates, Inc 2002
ISBN 0-596-00289-0

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

отметить

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

substitution из переписывающегося правила - вереница, которой заменяют (или заменяет), оригинальный URL, который образец подобранный. В дополнение к простому тексту, это может включить

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

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

как уже упомянуто, все переписывают правила, обращаются замена (в заказе, в котором они определены в config файле). URL полностью замененный замена и процесс переписывания продолжается, пока все правила не были применены, или это явно закончено a L флаг - видит ниже.

есть специальная вереница замены, названная ' - 'что означает: НИКАКАЯ замена ! Это полезно в обеспечении правил переписывания который только соответствовать URL, но не заменять ничем их. Это обычно используется в соединении с C (цепь) сигнализирует, чтобы применить больше чем один образец прежде, чем замена происходит.

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

отметить: Предоставление возможности переписывает во в-справочник контексте

чтобы позволять двигатель переписывания для в-справочник файлов конфигурации, Вы должны установить " RewriteEngine On "в этих файлах и " Options FollowSymLinks "нужно позволить. Если ваш администратор имеет инвалидов, отвергают из FollowSymLinks для справочника пользователя, тогда Вы не можете использовать двигатель переписывания. Это ограничение необходимо для соображений безопасности.

отметить: Образец, соответствующий во в-справочник контексте

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

есть одно исключение: Если вереница замены начинается с " http:// ", тогда директивная приставка будет нет быть добавлен, и внешнее переадресовывает или пропускная способность по доверенности (если флаг P используется), вызван!

отметить: Замена Абсолютных URL

когда Вы приставка область замены с http://thishost[:thisport] , mod_rewrite автоматически разденет это. Это автосокращение на URL с неявным внешним переадресовывает, является самым полезным в комбинации с функцией картографии, которая производит hostname часть.

помнить: безоговорочное внешнее переадресовывает к вашему собственному серверу, не будет работать с приставкой http://thishost из-за этой особенности. Чтобы достигать такого самопереадресовать, Вы должны использовать R - флаг.

отметить: Вереница Вопроса

образец не будет подобран против вереницы вопроса. Вместо этого Вы должны использовать a RewriteCond с %{QUERY_STRING} переменная. Вы можете, однако, создать URL в веренице замены, содержа часть вереницы вопроса. Просто используйте вопросительный знак в веренице замены, указывать, что следующий текст должен быть повторно введен в вереницу вопроса. Когда Вы хотите стереть существующую вереницу вопроса, заканчивать вереницу замены только вопросительным знаком. Чтобы объединять новую вереницу вопроса со старым, используйте [QSA] флаг.

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

во в-сервер конфигурации ( httpd.conf )
для запроса " GET /somepath/pathinfo ":


Данный Правило


Получающаяся Замена

--------------------------------------------------------------------------------^/somepath (. *) otherpath$1 инвалид, не поддержанный ^/somepath (. *) otherpath$1 [R] инвалид, не поддержанный ^/somepath (. *) otherpath$1 [P] инвалид, не поддержанный--------------------------------------------------------------------------------^/somepath (. *)/otherpath$1/otherpath/pathinfo ^/somepath (. *)/otherpath$1 [R] http://thishost/otherpath/pathinfo через внешнее переназначение ^/somepath (. *),/otherpath$1 [P] не имел смысла, не поддержанный--------------------------------------------------------------------------------^/somepath (. *) http://thishost/otherpath$1/otherpath/pathinfo ^/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/.htacccess , с RewriteBase /somepath )
для запроса " GET /somepath/localpath/pathinfo ":


Данный Правило


Получающаяся Замена

--------------------------------------------------------------------------------^localpath (. *) otherpath$1/somepath/otherpath/pathinfo ^localpath (. *) otherpath$1 [R] http://thishost/somepath/otherpath/pathinfo через внешнее переназначение ^localpath (. *), otherpath$1 [P] не имел смысла, не поддержанный--------------------------------------------------------------------------------^localpath (. *)/otherpath$1/otherpath/pathinfo ^localpath (. *)/otherpath$1 [R] http://thishost/otherpath/pathinfo через внешнее переназначение ^localpath (. *),/otherpath$1 [P] не имел смысла, не поддержанный--------------------------------------------------------------------------------^localpath (. *) http://thishost/otherpath$1/otherpath/pathinfo ^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 через внутреннее полномочие