Apache Версия 2.0 Сервера HTTP
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 .
Apache обрабатывает запрос HTTP в нескольких фазах. Крюк для каждой из этих фаз обеспечивается Apacheским программным интерфейсом приложения.
mod_rewrite
использования два из этих крюков: крюк перевода URL-К-ИМЕНИ-ФАЙЛА (используемый после того, как запрос HTTP был прочитан, но перед любыми запусками разрешения) и крюком Fixup (вызванный после фаз разрешения, и после в-справочник config файлов (
.htaccess
) были прочитаны, но прежде, чем довольный тренер активизирован).
как только запрос входит, и Apache определил соответствующий сервер (или действительный сервер), переписывающийся двигатель начинает перевод URL-К-ИМЕНИ-ФАЙЛА, обрабатывая mod_rewrite директивы от в-сервер конфигурации. Несколько шагов позже, когда заключительные справочники данных найдены, в-справочник директивы конфигурации mod_rewrite, вызваны в фазе Fixup.
когда mod_rewrite вызван в течение этих двух фаз программного интерфейса приложения, это читает уместный rulesets от его структуры конфигурации (который был или создан на запуске, для в-сервер контекста, или в течение директивного пересечения для в-справочник контекста). URL, переписывая двигатель начат с соответствующего ruleset (одно или более правил вместе с их условиями), и его операция - точно то же самое для обоих контекстов конфигурации. Только заключительная обработка результата отлична.
заказ правил в ruleset важен, потому что переписывающийся двигатель обрабатывает их в детали (не всегда очевидный) заказ, следующим образом: переписывающиеся машинные петли через rulesets (каждый ruleset быть составленным из
RewriteRule
директивы, с или без
RewriteCond
s), управляйте по правилу. Когда специфическое правило подобрано,
mod_rewrite
также проверяет соответствующие условия (
RewriteCond
директивы). По историческим причинам условия даются сначала, делая поток контроля, немного многоречивый. См. иллюстрацию 1 для большего количества деталей.
иллюстрация 1:
поток контроля переписывающегося двигателя через переписывание ruleset
как выше, сначала URL подобран против
образец
из правила. Если это не соответствует,
mod_rewrite
немедленно остановки, обрабатывающие то правило, и продолжаются к следующему правилу. Если
образец
спички,
mod_rewrite
чеки на условия правила. Если ни один не будет присутствовать, то URL будет заменен новой вереницей, построенной из
замена
вереница, и
mod_rewrite
продолжается к следующему правилу.
если
RewriteCond
s существуют, внутренняя петля начата, обрабатывая их в заказе, что они перечислены. Условия не подобраны против текущего URL непосредственно. A
TestString
построен, расширяя переменные, заднюю-часть-ссылки, поиски карты, и т.д., против который
CondPattern
подобран. Если образец не в состоянии соответствовать одному из условий, полный набор правила и связанных условий терпит неудачу. Если образец соответствует данному условию, то соответствие продолжается к следующему условию, пока не больше условий не доступно. Если все условия соответствуют, обработка продолжена с заменой
замена
вереница для URL.
Используя круглые скобки в
образец
или в одном из
CondPattern
s заставляет заднюю-часть-ссылки быть внутренне созданной. На них можно позже сослаться, используя вереницы
$N
и
%N
(см. ниже), чтобы создавать
замена
и
TestString
вереницы. Иллюстрация 2 пытается показать, как задняя-часть-ссылки передана через процесс для более позднего расширения.
иллюстрация 2:
поток задней-части-ссылки через правило.
на Apacheа 1.3.20, специальные характеры в
TestString
и
замена
верениц можно избежать (то есть, рассмотреться как нормальные характеры без их обычного специального значения), предустанавливая их с разрезом ('\') характер. Другими словами, Вы можете включить фактический характер долларового признака в a
замена
вереница при использовании '
\$
'; это препятствует mod_rewrite пробовать рассмотреть это как backreference.
этот модуль держит след двух дополнительных (нестандартных) переменных окружающей среды CGI/SSI названным
SCRIPT_URL
и
SCRIPT_URI
. они содержат
логичный
представление сети к текущему ресурсу, в то время как стандартные переменные CGI/SSI
SCRIPT_NAME
и
SCRIPT_FILENAME
содержать
физический
представление системы.
заметить: Эти переменные держат ТУРОВ/URL поскольку их первоначально требовали , то есть, прежде любое переписывание. Это важно отметить, потому что процесс переписывания прежде всего используется, чтобы переписать логические URL к физическим именам пути.
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/
для многочисленных примеров обычных, и "не столь обычный", использования для mod_rewrite, см. Rewrite Guide , и Advanced Rewrite Guide документы.
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.
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
.
следующий список дает подробную информацию о внутренних шагах обработки:
запрос: /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а).
Description: | определяет условие, при котором будет иметь место переписывание |
---|---|
Syntax: |
RewriteCond
TestString
CondPattern
|
Context: | сервер config, действительный хозяин, справочник, .htaccess |
Override: | FileInfo |
Status: | расширение |
Module: | mod_rewrite |
RewriteCond
директива определяет условие правила. Один или больше
RewriteCond
может предшествовать a
RewriteRule
директива. Следующее правило тогда только используется, если оба текущее состояние ТУРОВ соответствуют его образцу,
и
если эти условия встречены.
TestString является вереницей, которая может содержать следующие расширенные конструкции в дополнение к простому тексту:
$N
(0 <= N <= 9), которые обеспечивают доступ к сгруппированным частям (в круглых скобках) образца, от
RewriteRule
который является подчиненным потоку набор
RewriteCond
условия..
%N
(1 <= N <= 9), которые обеспечивают доступ к сгруппированным частям (снова, в круглых скобках) образца, от подобранного последнего
RewriteCond
в текущем наборе условий.
${mapname:key|default}
. см.
the documentation for RewriteMap
для большего количества деталей.
%{
NAME_OF_VARIABLE
}
где
NAME_OF_VARIABLE
может быть вереница, взятая от следующего списка:
удары головой HTTP: | связь & запрос: | |
---|---|---|
HTTP_USER_AGENT
HTTP_REFERER HTTP_COOKIE HTTP_FORWARDED HTTP_HOST HTTP_PROXY_CONNECTION HTTP_ACCEPT |
REMOTE_ADDR
REMOTE_HOST REMOTE_PORT REMOTE_USER REMOTE_IDENT REQUEST_METHOD SCRIPT_FILENAME PATH_INFO QUERY_STRING AUTH_TYPE |
|
внутренности сервера: | материал системы: | экстренное сообщение: |
DOCUMENT_ROOT
SERVER_ADMIN SERVER_NAME SERVER_ADDR SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE |
TIME_YEAR
TIME_MON TIME_DAY TIME_HOUR TIME_MIN TIME_SEC TIME_WDAY ВРЕМЯ |
API_VERSION
THE_REQUEST REQUEST_URI REQUEST_FILENAME IS_SUBREQ HTTPS |
эти переменные все соответствуют подобно названным УДАРАМ ГОЛОВОЙ ПАНТОМИМЫ HTTP, C переменные Apacheского сервера или
struct tm
области системы Unix. Больше всего зарегистрированы в другом месте в Руководстве или в спецификации CGI. Те, которые являются особенными для mod_rewrite, включают те ниже.
IS_SUBREQ
API_VERSION
THE_REQUEST
GET /index.html HTTP/1.1
"). Это не включает никаких дополнительных ударов головой, посланных браузером.
REQUEST_URI
REQUEST_FILENAME
HTTPS
mod_ssl
загружен).
другие вещи Вы должны знать:
filename
область внутреннего
request_rec
структура Apacheского сервера. Имя - обычно известное переменное название CGI, в то время как второе - соответствующая копия REQUEST_URI (который содержит ценность
uri
область
request_rec
).
%{ENV:variable}
, где
переменная
может быть любая переменная окружающей среды, является также доступным. Это наверх смотрится через внутренние Apacheские структуры и (если не найденным там) через
getenv()
от Apacheского процесса сервера.
%{SSL:variable}
, где
переменная
является названием
SSL environment variable
, может использоваться действительно ли
mod_ssl
загружен, но будет всегда расширяться к пустой веренице, если это не. Пример:
%{SSL:SSL_CIPHER_USEKEYSIZE}
может расшириться к
128
.
%{HTTP:header}
, где
удар головой
может быть любое название УДАРА ГОЛОВОЙ ПАНТОМИМЫ HTTP, может всегда использоваться, чтобы получить ценность удара головой, посланного в запросе HTTP. Пример:
%{HTTP:Proxy-Connection}
является ценностью удара головой HTTP "
Proxy-Connection:
".
%{LA-U:variable}
может использоваться для предвидений, которые выполняют внутренний подзапрос (НА ОСНОВЕ URL) определить финал ценность
переменная
. это может использоваться, чтобы получить доступ к переменной для того, чтобы переписать, который не доступен в потоке стадия, но будет установлен в более поздней фазе.
например, чтобы переписать согласно
REMOTE_USER
переменная изнутри в-сервер контекста (
httpd.conf
файл), Вы должны использовать
%{LA-U:REMOTE_USER}
- эта переменная установлена фазами разрешения, которые прибывают
после
фаза та перевода URL (в течение который mod_rewrite работает).
с другой стороны, потому что mod_rewrite осуществляет его в-справочник контекст (
.htaccess
файл) через фазу Fixup программного интерфейса приложения и потому что фазы разрешения прибывают
прежде
эта фаза, Вы только можете использовать
%{REMOTE_USER}
в том контексте.
%{LA-F:variable}
может использоваться, чтобы выполнить внутренний подзапрос (на основе имени файла), определить заключительную ценность
переменная
. большинство времени, это - то же самое как LA-U выше.
CondPattern является образцом условия, регулярное выражение, которое применено к текущему случаю TestString . TestString сначала оценен, перед быть согласованным против CondPattern .
помнить: CondPattern является a perl совместимое регулярное выражение с некоторыми дополнениями:
!
'характер (восклицательный знак), чтобы определить a
нет
- соответствие образцу.
""
(две кавычки), это сравнивается
TestString
к пустой веренице.
[
флаги
]
как третий аргумент
RewriteCond
директива, где
флаги
является отделенным запятой списком любого из следующих флагов:
nocase|NC
'(
n
o
c
ase)
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 и т.д), то Вы получаете начальную страницу Макса (который мог включить структуры, или другие специальные особенности). Если Вы используете браузер Рыси (который является на основе терминала), то Вы получаете начальную страницу минуты (который мог быть версией, разработанной для легкого, просмотра только для текста). Если ни одно из этих условий не применяется (Вы используете любой другой браузер, или ваш браузер идентифицирует себя как кое-что нестандартное), Вы получаете станд. (стандарт) начальная страница.
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
директива для каждого действительного хозяина, в котором Вы желаете использовать это.
Description: |
устанавливает название файла замка, используемого для
RewriteMap
синхронизация
|
---|---|
Syntax: |
RewriteLock
file-path
|
Context: | сервер config |
Status: | расширение |
Module: | mod_rewrite |
эта директива устанавливает имя файла для синхронизации lockfile, с которым должен общаться mod_rewrite
RewriteMap
программы
. устанавливают этот lockfile в местную дорожку (не на УСТАНОВЛЕННОМ NFS устройстве), когда Вы хотите использовать программу карты переписывания. Это не требуется для других типов переписывания карт.
Description: | наборы название файла, используемого для заготовки леса переписывают машинную обработку |
---|---|
Syntax: |
RewriteLog
file-path
|
Context: | сервер config, действительный хозяин |
Status: | расширение |
Module: | mod_rewrite |
RewriteLog
директива устанавливает название файла, к которому сервер регистрирует любые действия переписывания, которые это выполняет. Если название не начинается с разреза ('
/
'), тогда это, как предполагают, является относительно
Корень Сервера
. директива должна произойти только однажды в сервер config.
/dev/null
, потому что, хотя двигатель переписывания не делает тогда продукцию к logfile, это все еще создает logfile продукцию внутренне.
это замедлит сервер без преимущества для администратора!
повредить заготовку леса или удалять или комментируют
RewriteLog
директива или использование
RewriteLogLevel 0
!
RewriteLog "/usr/local/var/apache/logs/rewrite.log"
Description: | устанавливает многословие файла системного журнала, используемого переписывающимся двигателем |
---|---|
Syntax: |
RewriteLogLevel
Level
|
Default: |
RewriteLogLevel 0
|
Context: | сервер config, действительный хозяин |
Status: | расширение |
Module: | mod_rewrite |
RewriteLogLevel
директива устанавливает уровень многословия переписывания logfile. Уровень по умолчанию 0 средств никакая заготовка леса, в то время как 9 или больше средств, что фактически все действия зарегистрированы.
повредить заготовку леса переписывания действий просто набор уровень к 0. Это повреждает, все переписывают регистрации действия.
RewriteLogLevel 3
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 может использоваться:
txt
, MapSource: дорожка файловой системы Unix к действительному регулярному файлу
это - стандартная особенность карты переписывания где MapSource является простым файлом ASCII, содержащим любые чистые линии, линии комментария (начинающийся с '#' характер) или пары как следующий - один в линию.
MatchingKey SubstValue
## ## map.txt -- rewriting map ## Ralf.S.Engelschall rse # Bastard Operator From Hell Mr.Joe.Average joe # Mr. Average
RewriteMap real-to-user txt:/path/to/file/map.txt
rnd
, MapSource: дорожка файловой системы Unix к действительному регулярному файлу
это идентично Стандартному Простому варианту Текста выше, но со специальной особенностью постобработки: После поиска ценности это разобрано согласно содержавшемуся "
|
"характеры, которые имеют значение "или". Другими словами они указывают ряд альтернатив, из которых фактическая возвращенная ценность выбрана беспорядочно. Например, Вы могли бы использовать следующий файл карты и директивы, чтобы обеспечить случайный груз, балансирующий между несколькими серверами конца, через обратное полномочие. Изображения посылают одному из серверов в 'статическом' объединении, в то время как все остальное посылают одному из 'динамического' объединения.
пример:
## ## map.txt -- rewriting map ## static www1|www2|www3|www4 dynamic www5|www6
RewriteMap servers rnd:/path/to/file/map.txt
RewriteRule ^/(.*\.(png|gif|jpg)) http://${servers:static}/$1 [NC,P,L]
RewriteRule ^/(.*) http://${servers:dynamic}/$1 [P,L]
dbm[=
type
]
, MapSource: дорожка файловой системы Unix к действительному регулярному файлу
здесь источник - двоичный формат файл DBM, содержащий то же самое содержание как a Простой Текст файл формата, но в специальном представлении, которое оптимизировано для действительно быстрых поисков. напечатать может быть sdbm, gdbm, ndbm, или децибел в зависимости от compile-time settings . если напечатать является ommitted, собирание разового неплатежа будет выбрано. Вы можете создать такой файл с любым инструментом DBM или со следующим подлинником Perl. Убедитесь, что приспособили это, чтобы создать соответствующий тип DBM. Пример создает файл NDBM.
#!/path/to/bin/perl ## ## txt2dbm -- convert txt map to dbm format ## use NDBM_File; use Fcntl; ($txtmap, $dbmmap) = @ARGV; open(TXT, "<$txtmap") or die "Couldn't open $txtmap!\n"; tie (%DB, 'NDBM_File', $dbmmap,O_RDWR|O_TRUNC|O_CREAT, 0644) or die "Couldn't create $dbmmap!\n"; while (<TXT>) { next if (/^\s*#/ or /^\s*$/); $DB{$1} = $2 if (/^\s*(\S+)\s+(\S+)/); } untie %DB; close(TXT);
$ txt2dbm map.txt map.db
int
, MapSource: Внутренняя Apache функция
здесь, источник - внутренняя Apache функция. В настоящее время Вы не можете создать ваше собственное, но следующие функции уже существуют:
prg
, MapSource: дорожка файловой системы Unix к действительному регулярному файлу
здесь источник - программа, не файл карты. Чтобы создавать это, Вы можете использовать язык вашего выбора, но результатом должна быть выполнимая программа (или кодекс объекта или подлинник с волшебной уловкой печенья '
#!/path/to/interpreter
'как первая линия).
эта программа запущена однажды, когда Apache сервер начат, и затем общается с двигателем переписывания через
stdin
и
stdout
описатели файла. Для каждого поиска функции карты это примет ключ к поиску как newline-законченная вереница на
stdin
. это тогда должно отдать наверх выглядевшую ценность как newline-законченная вереница на
stdout
или четырехсимвольная вереница "
NULL
"если это терпит неудачу (
то есть.
, нет никакой соответствующей ценности для данного ключа). Тривиальная программа, которая осуществит 1:1 карта (
то есть.
, ключ == ценность), мог быть:
#!/usr/bin/perl $| = 1; while (<STDIN>) { # ...put here any transformations or lookups... print $_; }
но быть очень осторожным:
stdout
. избежать этого, поскольку это вызовет deadloop! "
$|=1
"используется выше, предотвращать это.
RewriteLock
директива может использоваться, чтобы определить lockfile, который mod_rewrite может использовать, чтобы синхронизировать коммуникацию с программой картографии. По умолчанию никакая такая синхронизация не имеет место.
RewriteMap
директива может произойти не раз. Поскольку каждая функция картографии используют тот
RewriteMap
директива, чтобы объявить ее переписывание mapfile. В то время как Вы не можете
объявить
карта во в-справочник контексте это конечно возможно к
использование
эта карта во в-справочник контексте.
mtime
из изменений mapfile или сервера делает переначало. Этим путем Вы можете иметь функции карты в правилах, которые используются для
каждый
запрос. Это не никакая проблема, потому что внешний поиск только случается однажды!
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 в запрос, Вы можете увеличить неплатеж к желательной ценности.
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, который образец подобранный. В дополнение к простому тексту, это может включить
$N
) к образцу RewriteRule
%N
) к последнему соответствовал образцу RewriteCond
%{VARNAME}
)
${mapname:key|default}
)
Обратные ссылки - идентификаторы формы
$
N
(
N
=0.. 9), который будет заменен содержанием
N
группа th подобранного
образец
. переменные сервера - то же самое что касается
TestString
из a
RewriteCond
директива. Функции картографии прибывают от
RewriteMap
директива и объясняется там. Эти три типа переменных расширены в заказе выше.
как уже упомянуто, все переписывают правила, обращаются
замена
(в заказе, в котором они определены в config файле). URL
полностью замененный
замена
и процесс переписывания продолжается, пока все правила не были применены, или это явно закончено a
L
флаг - видит ниже.
есть специальная вереница замены, названная '
-
'что означает:
НИКАКАЯ замена
! Это полезно в обеспечении правил переписывания который
только
соответствовать URL, но не заменять ничем их. Это обычно используется в соединении с
C
(цепь) сигнализирует, чтобы применить больше чем один образец прежде, чем замена происходит.
дополнительно Вы можете установить специальный
flags
для
замена
прилагая
[
флаги
]
как третий аргумент
RewriteRule
директива.
флаги
является отделенным запятой списком любого из следующих флагов:
chain|C
'(
c
hained со следующим правилом)
.www
"часть, во в-справочник наборе правила, когда Вы позволяете внешнему переадресовывать, случается (где"
.www
"часть не должна произойти!).
cookie|CO=
НАЗВАНИЕ
:
ВАЛ
:
область
[:
целая жизнь
[:
дорожка
]] '(набор
компания
оки)
env|E=
ВАР
:
ВАЛ
'(набор
e
переменная nvironment)
$N
и
%N
), который будет расширен. Вы можете использовать этот флаг не раз, установить больше чем одну переменную. Переменные могут позже быть dereferenced во многих ситуациях, обычно изнутри XSSI (через
<!--#echo var="VAR"-->
) или CGI (
$ENV{'VAR'}
). Вы можете также dereference переменная в более позднем образце RewriteCond, используя
%{ENV:VAR}
. использовать это, чтобы раздеть информацию от URL, поддерживая отчет той информации.
forbidden|F
'(вынуждают URL быть
f
orbidden)
gone|G
'(вынуждают URL быть
g
один)
last|L
'(
l
правило ast)
last
командовать или
break
команда в C. Используйте этот флаг, чтобы препятствовать в настоящее время переписанному URL быть переписанным далее по следующим правилам. Например, используйте это, чтобы переписать URL дорожки корня ('
/
') к реальному,
например.
, '
/e/www/
'.
next|N
'(
n
расширение вокруг)
next
командовать или
continue
команда в C. Используйте этот флаг, чтобы повторно начать процесс переписывания - чтобы немедленно пойти в вершину петли.
nocase|NC
'(
n
o
c
ase)
noescape|NE
'(
n
o ТУРЫ
e
scaping продукции)
RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
/foo/zed
'в безопасный запрос о'
/bar?arg=P1=zed
'.
nosubreq|NS
'(
n
ot для внутреннего
s
ub-запросы)
mod_include
попытки узнавать информацию о возможных директивных файлах по умолчанию (
index.xxx
). На подзапросах это не всегда полезно, и может даже вызвать ошибки, если полный набор правил применен. Используйте этот флаг, чтобы исключить некоторые правила.
proxy|P
'(сила
p
роксай)
http://
hostname
), который может быть обработан Apacheским модулем по доверенности. В противном случае Вы получите ошибку от модуля по доверенности. Используйте этот флаг, чтобы достигнуть более мощного выполнения
ProxyPass
директива, чтобы нанести на карту отдаленное содержание в namespace местного сервера.
отметить:
mod_proxy
нужно позволить, чтобы использовать этот флаг.
passthrough|PT
'(
p
задница
t
hrough следующему тренеру)
uri
область внутреннего
request_rec
структура к ценности
filename
область. Этот флаг - только рубление, чтобы позволить постобработку продукции
RewriteRule
директивы, используя
Alias
,
ScriptAlias
,
Redirect
, и другие директивы от различных переводчиков ТУРОВ-К-ИМЕНИ-ФАЙЛА. Например, чтобы переписать
/abc
к
/def
использование
mod_rewrite
, и затем
/def
к
/ghi
использование
mod_alias
:
RewriteRule ^/abc(.*) /def$1 [PT]
Alias /def /ghi
PT
флаг,
mod_rewrite
перепишет
uri=/abc/...
к
filename=/def/...
поскольку полный послушный программным интерфейсом приложения переводчик ТУРОВ-К-ИМЕНИ-ФАЙЛА должен сделать. Тогда
mod_alias
будет пробовать сделать переход ТУРОВ-К-ИМЕНИ-ФАЙЛА, который будет терпеть неудачу.
отметить:
Вы должны использовать этот флаг, если Вы хотите смешать директивы от различных модулей, которые позволяют переводчикам URL-К-ИМЕНИ-ФАЙЛА
. типичный пример - использование
mod_alias
и
mod_rewrite
.
qsappend|QSA
'(
q
uery
s
tring
a
ppend)
redirect|R
[=
кодекс
]
'(сила
r
edirect
)
http://thishost[:thisport]/
(который делает новый URL ТУРАМИ), вызывать внешнее переназначение. Если нет
кодекс
дается, ответ HTTP 302 (ПЕРЕМЕЩЕННЫЙ ВРЕМЕННО) будет возвращен. Если Вы хотите использовать другие кодексы ответа в диапазоне 300-400, просто определите соответствующее число, или используйте одно из следующих символических названий:
temp
(неплатеж),
permanent
,
seeother
. использовать это для правил к canonicalize URL и возвращать это клиенту - к перевести "
/~
"в"
/u/
", или всегда прилагать разрез к
/u/
пользователь
, и т.д.
http://thishost[:thisport]/
к URL, и переписывающий продолжится. Обычно, Вы будете хотеть прекратить переписывать в этом пункте, и переадресуйте немедленно. Чтобы прекращать переписывать, Вы должны добавить 'L' флаг.
skip|S
=
цифра
'(
s
кип следующее правило (а))
skip=N
, где N - число правил в еще-пункте. (Это
нет
то же самое как 'chain|C' флаг!)
type|T
=
ТИП ПАНТОМИМЫ
'(вызывают ПАНТОМИМУ
t
ype)
.php
файлы, чтобы быть
показанный
mod_php
если их называют с
.phps
расширение:
RewriteRule ^(.+\.php)s$ $1 [T=application/x-httpd-php-source]
RewriteEngine On
"в этих файлах
и
"
Options FollowSymLinks
"нужно позволить. Если ваш администратор имеет инвалидов, отвергают из
FollowSymLinks
для справочника пользователя, тогда Вы не можете использовать двигатель переписывания. Это ограничение необходимо для соображений безопасности.
есть одно исключение: Если вереница замены начинается с "
http://
", тогда директивная приставка будет
нет
быть добавлен, и внешнее переадресовывает или пропускная способность по доверенности (если флаг
P
используется), вызван!
когда Вы приставка область замены с
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 через внутреннее полномочие