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


Разделы:   1    2    3    4    5    6    7    8    9      10      11    12    13    14    15    16  

Раздел 10. Модули Апача

Пункты:   85    86    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    163    164    165    166    167    168    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    203    204    205    206    207    208    209    210    211    212    213  

 <         > 
  RU            EN  

Пункт 97. Модуль Apache mod_alias

Директивы, содержащиеся в этом модуле, позволяют манипулировать URL-адресами и контролировать их по мере поступления запросов на сервер. Директивы Alias и ScriptAlias используются для сопоставления URL-адресов и путей файловой системы. Это позволяет использовать контент, который не находится непосредственно под DocumentRoot частью дерева веб-документов. Директива ScriptAlias имеет дополнительный эффект, помечая целевой каталог как содержащий только сценарии CGI.

Директивы Redirect используются для указания клиентам сделать новый запрос с другим URL-адресом. Они часто используются, когда ресурс перемещается в новое место.

Когда директивы Alias , ScriptAlias и Redirect используются в разделе <Location> или <LocationMatch> , синтаксис выражения можно использовать для управления целевым путем или URL-адресом.

mod_alias предназначен для решения простых задач по манипулированию URL-адресами. Для более сложных задач, таких как манипулирование строкой запроса, используйте инструменты, предоставляемые mod_rewrite .

Порядок обработки

Псевдонимы и перенаправления, встречающиеся в разных контекстах, обрабатываются так же, как и другие директивы, в соответствии со стандартными правилами слияния. Но когда несколько псевдонимов или перенаправлений встречаются в одном контексте (например, в одном <VirtualHost> разделе), они обрабатываются в определенном порядке.

Во-первых, все перенаправления обрабатываются до обработки псевдонимов, и, следовательно, к запросу, который соответствует Redirect или RedirectMatch никогда не будет применен псевдоним. Во-вторых, псевдонимы и перенаправления обрабатываются в том порядке, в котором они указаны в файлах конфигурации, причем первое совпадение имеет приоритет.

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

 Псевдоним "/foo/bar" "/baz"
Псевдоним "/foo" "/gaq" 

Но если бы две вышеуказанные директивы были переставлены по порядку, то /foo Alias всегда совпадало бы перед /foo/bar Alias , поэтому последняя директива была бы проигнорирована.

Когда директивы Alias , ScriptAlias и Redirect используются в разделе <Location> или <LocationMatch> , эти директивы будут иметь приоритет над любыми глобально определенными директивами Alias , ScriptAlias и . Redirect

Псевдоним Директива

Описание:Сопоставляет URL-адреса с местоположениями файловой системы
Синтаксис: Alias [URL-path] file-path|directory-path
Контекст:конфигурация сервера, виртуальный хост, каталог
Положение дел:База
Модуль:mod_alias

Директива Alias позволяет хранить документы в локальной файловой системе, отличной от DocumentRoot . URL-адреса с путем (%-decoded), начинающимся с URL-path , будут сопоставлены с локальными файлами, начинающимися с directory-path . URL -путь чувствителен к регистру даже в файловых системах, нечувствительных к регистру.

 Псевдоним "/image" "/ftp/pub/image" 

Запрос на http://example.com/image/foo.gif заставит сервер вернуть файл /ftp/pub/image/foo.gif . Сопоставляются только полные сегменты пути, поэтому указанный выше псевдоним не будет соответствовать запросу на http://example.com/imagefoo.gif . Для более сложного сопоставления с использованием регулярных выражений см. AliasMatch директиву.

Обратите внимание, что если вы включаете завершающий / в URL-пути , серверу потребуется завершающий / для расширения псевдонима. То есть, если вы используете

 Псевдоним "/icons/" "/usr/local/apache/icons/" 

тогда URL-адрес /icons не будет иметь псевдоним, так как в конце отсутствует /. Точно так же, если вы опускаете косую черту в URL-пути , вы также должны опустить ее в пути к файлу .

Обратите внимание, что вам может потребоваться указать дополнительные <Directory> разделы, которые охватывают назначение псевдонимов. Псевдонимы происходят до <Directory> проверки разделов, поэтому затрагивается только назначение псевдонимов. (Обратите внимание, однако, что <Location> разделы выполняются один раз перед выполнением псевдонимов, поэтому они будут применяться.)

В частности, если вы создаете Alias каталог вне вашего DocumentRoot , вам может потребоваться явно разрешить доступ к целевому каталогу.

 Псевдоним "/image" "/ftp/pub/image"
<Каталог "/ftp/pub/image">
 Требовать все предоставленные
</Каталог> 

Любое количество косых черт в параметре URL-пути соответствует любому количеству косых черт в запрошенном URL-пути.

Если Alias директива используется в разделе <Location> или <LocationMatch> , URL-путь опускается, а путь к файлу интерпретируется с использованием синтаксиса выражения.
Этот синтаксис доступен в Apache 2.4.19 и более поздних версиях.

 <Расположение "/изображение">
 Псевдоним "/ftp/pub/image"
</местоположение>
<LocationMatch "/ошибка/(?<ЧИСЛО>[0-9]+)">
 Псевдоним "/usr/local/apache/errors/%{env:MATCH_NUMBER}.html"
</LocationMatch> 


Директива соответствия псевдонимов

Описание:Сопоставляет URL-адреса с местоположениями файловой системы с помощью регулярных выражений.
Синтаксис: AliasMatch regex file-path|directory-path
Контекст:конфигурация сервера, виртуальный хост
Положение дел:База
Модуль:mod_alias

Эта директива эквивалентна Alias , но использует регулярные выражения вместо простого сопоставления префиксов. Предоставленное регулярное выражение сопоставляется с URL-путем, и если оно совпадает, сервер заменяет любые совпадения в скобках в заданную строку и использует ее в качестве имени файла. Например, чтобы активировать /icons каталог, можно использовать:

 AliasMatch "^/icons(/|$)(.*)" "/usr/local/apache/icons$1$2" 

Доступен весь спектр возможностей регулярных выражений . Например, можно создать псевдоним с нечувствительным к регистру соответствием URL-пути:

 AliasMatch "(?i)^/image(.*)" "/ftp/pub/image$1" 

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

Другими словами, простое изменение Alias на AliasMatch не будет иметь такого же эффекта. Как минимум нужно добавить ^ в начало регулярного выражения и добавить (.*)$ в конец, и добавить $1 в конец замены.

Например, предположим, что вы хотите заменить это на AliasMatch:

 Псевдоним "/image/" "/ftp/pub/image/" 

Это НЕ эквивалентно - не делайте этого! Это отправит все запросы, содержащие /image/ в любом месте, на /ftp/pub/image/:

 AliasMatch "/изображение/" "/ftp/pub/изображение/" 

Вот что вам нужно, чтобы получить тот же эффект:

 AliasMatch "^/image/(.*)$" "/ftp/pub/image/$1" 

Конечно, нет смысла использовать AliasMatch там, где Alias будет работать. AliasMatch позволяет делать более сложные вещи. Например, вы можете обслуживать разные типы файлов из разных каталогов:

 AliasMatch "^/image/(.*)\.jpg$" "/files/jpg.images/$1.jpg"
AliasMatch "^/image/(.*)\.gif$" "/files/gif.images/$1.gif" 

Несколько начальных косых черт в запрошенном URL-адресе отбрасываются сервером до того, как директивы этого модуля сравниваются с запрошенным URL-путем.



Директива перенаправления

Описание:Отправляет внешнее перенаправление с просьбой к клиенту получить другой URL-адрес.
Синтаксис: Redirect [status] [URL-path] URL
Контекст:конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределить:Информация о файле
Положение дел:База
Модуль:mod_alias

Директива Redirect сопоставляет старый URL-адрес с новым, запрашивая у клиента повторную загрузку ресурса в новом месте.

Старый URL-путь — это путь с учетом регистра (%-decoded), начинающийся с косой черты. Относительный путь не допускается.

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

Тогда любой запрос, начинающийся с URL-пути, вернет клиенту запрос на перенаправление по адресу целевого URL . К целевому URL-адресу будет добавлена дополнительная информация о пути помимо совпавшего URL-пути.

 # Перенаправление на URL-адрес на другом хосте
Перенаправить "/service" "http://foo2.example.com/service"
# Перенаправление на URL на том же хосте
Перенаправить "/один" "/два" 

Если клиент запрашивает http://example.com/service/foo.txt , вместо этого ему будет предложено получить доступ http://foo2.example.com/service/foo.txt . Сюда входят запросы с GET такими параметрами, как http://example.com/service/foo.pl?q=23&a=42 , они будут перенаправлены на http://foo2.example.com/service/foo.pl?q=23&a=42 . Обратите внимание, что POST s будет отброшен.
Сопоставляются только полные сегменты пути, поэтому приведенный выше пример не будет соответствовать запросу для http://example.com/servicefoo.txt . Для более сложного сопоставления с использованием синтаксиса выражения опустите аргумент URL-пути, как описано ниже. Кроме того, для сопоставления с использованием регулярных выражений см. RedirectMatch директиву.

Примечание

Redirect директивы имеют приоритет над директивами Alias и ScriptAlias , независимо от их порядка в файле конфигурации. Redirect директивы внутри Location имеют приоритет над директивами Redirect и Alias с URL-путем .

Если аргумент состояния не указан, перенаправление будет «временным» (состояние HTTP 302). Это указывает клиенту, что ресурс временно перемещен. Аргумент состояния может использоваться для возврата других кодов состояния HTTP:

постоянный
Возвращает статус постоянного перенаправления (301), указывающий, что ресурс перемещен навсегда.
температура
Возвращает статус временного перенаправления (302). Это значение по умолчанию.
видеть другое
Возвращает статус «Просмотреть другое» (303), указывающий, что ресурс был заменен.
ушел
Возвращает статус «Ушел» (410), указывающий, что ресурс был окончательно удален. Когда используется этот статус, аргумент URL должен быть опущен.

Другие коды состояния можно вернуть, указав числовой код состояния в качестве значения status . Если статус находится между 300 и 399, должен присутствовать аргумент URL . Если статус не находится между 300 и 399, аргумент URL должен быть опущен. Статус должен быть действительным кодом состояния HTTP, известным HTTP-серверу Apache (см. функцию send_error_response в http_protocol.c).

 Постоянная переадресация "/one" "http://example.com/two"
Перенаправление 303 "/three" "http://example.com/other" 

Если Redirect директива используется в разделе <Location> или <LocationMatch> с опущенным URL-путем , то параметр URL будет интерпретироваться с использованием синтаксиса выражения.
Этот синтаксис доступен в Apache 2.4.19 и более поздних версиях.

 <Расположение "/один">
 Постоянная переадресация "http://example.com/two"
</местоположение>
<Местоположение "/три">
 Перенаправление 303 "http://example.com/other"
</местоположение>
<LocationMatch "/ошибка/(?<ЧИСЛО>[0-9]+)">
 Постоянная переадресация "http://example.com/errors/%{env:MATCH_NUMBER}.html"
</LocationMatch> 


Директива RedirectMatch

Описание:Отправляет внешнее перенаправление на основе совпадения регулярного выражения с текущим URL-адресом.
Синтаксис: RedirectMatch [status] regex URL
Контекст:конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределить:Информация о файле
Положение дел:База
Модуль:mod_alias

Эта директива эквивалентна Redirect , но использует регулярные выражения вместо простого сопоставления префиксов. Предоставленное регулярное выражение сопоставляется с URL-путем, и если оно совпадает, сервер заменяет любые совпадения в скобках в заданную строку и использует ее в качестве имени файла. Например, чтобы перенаправить все файлы GIF в файлы JPEG с одинаковыми именами на другом сервере, можно использовать:

 RedirectMatch "(.*)\.gif$" "http://other.example.com$1.jpg" 

Соображения, связанные с различием между Alias и , AliasMatch также применимы к различию между Redirect и RedirectMatch . Подробнее см AliasMatch .

RedirectPermanent директива

Описание:Отправляет внешнее постоянное перенаправление с просьбой к клиенту получить другой URL-адрес.
Синтаксис: RedirectPermanent URL-path URL
Контекст:конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределить:Информация о файле
Положение дел:База
Модуль:mod_alias

Эта директива сообщает клиенту, что перенаправление является постоянным (статус 301). Точно эквивалентно Redirect permanent .



Директива RedirectTemp

Описание:Отправляет внешнее временное перенаправление с просьбой к клиенту получить другой URL-адрес.
Синтаксис: RedirectTemp URL-path URL
Контекст:конфигурация сервера, виртуальный хост, каталог, .htaccess
Переопределить:Информация о файле
Положение дел:База
Модуль:mod_alias

Эта директива сообщает клиенту, что перенаправление является временным (статус 302). Точно эквивалентно Redirect temp .



Директива ScriptAlias

Описание:Сопоставляет URL-адрес с расположением в файловой системе и назначает цель как сценарий CGI.
Синтаксис: ScriptAlias [URL-path] file-path|directory-path
Контекст:конфигурация сервера, виртуальный хост, каталог
Положение дел:База
Модуль:mod_alias

Директива ScriptAlias ведет себя так же, как и Alias директива, за исключением того, что она помечает целевой каталог как содержащий сценарии CGI, которые будут обрабатываться обработчиком mod_cgi 'cgi-script. URL-адреса с чувствительным к регистру (%-decoded) путем, начинающимся с URL-path , будут сопоставлены со сценариями, начинающимися со второго аргумента, который является полным путем в локальной файловой системе.

 ScriptAlias "/cgi-bin/" "/web/cgi-bin/" 

Запрос на http://example.com/cgi-bin/foo заставит сервер запустить сценарий /web/cgi-bin/foo . Эта конфигурация по существу эквивалентна:

 Псевдоним "/cgi-bin/" "/web/cgi-bin/"
<Расположение "/cgi-bin">
 cgi-скрипт SetHandler
 Опции +ExecCGI
</местоположение> 

ScriptAlias также может использоваться в сочетании со сценарием или обработчиком, который у вас есть. Например:

 ScriptAlias "/cgi-bin/" "/web/cgi-handler.pl" 

В этом случае все запрошенные файлы /cgi-bin/ будут обрабатываться файлом, который вы настроили, это позволяет вам использовать свой собственный обработчик. Вы можете использовать это как оболочку для CGI, чтобы вы могли добавлять контент или какое-либо другое действие на заказ.

Безопаснее не размещать CGI-скрипты под , DocumentRoot чтобы избежать случайного раскрытия их исходного кода при изменении конфигурации. Это ScriptAlias упрощается за счет одновременного сопоставления URL-адреса и назначения сценариев CGI. Если вы решите поместить свои сценарии CGI в каталог, уже доступный из Интернета, не используйте файлы ScriptAlias . Вместо этого используйте <Directory> , SetHandler и Options как в:
 <Каталог "/usr/local/apache2/htdocs/cgi-bin">
 cgi-скрипт SetHandler
 Опции ExecCGI
</Каталог> 
Это необходимо, поскольку несколько URL-путей могут сопоставляться с одним и тем же расположением в файловой системе, что может привести к обходу ScriptAlias и раскрытию исходного кода сценариев CGI, если они не ограничены разделом Directory .

Если ScriptAlias директива используется в разделе <Location> или <LocationMatch> с опущенным URL-путем, то параметр URL будет интерпретироваться с использованием синтаксиса выражения.
Этот синтаксис доступен в Apache 2.4.19 и более поздних версиях.

 <Расположение "/cgi-bin">
 ScriptAlias "/web/cgi-bin/"
</местоположение>
<LocationMatch "/cgi-bin/errors/(?<NUMBER>[0-9]+)">
 ScriptAlias "/web/cgi-bin/errors/%{env:MATCH_NUMBER}.cgi"
</LocationMatch> 

Смотрите также

  • Учебник компьютерной графики


Директива ScriptAliasMatch

Описание:Сопоставляет URL-адрес с расположением в файловой системе с помощью регулярного выражения и назначает цель как сценарий CGI.
Синтаксис: ScriptAliasMatch regex file-path|directory-path
Контекст:конфигурация сервера, виртуальный хост
Положение дел:База
Модуль:mod_alias

Эта директива эквивалентна ScriptAlias , но использует регулярные выражения вместо простого сопоставления префиксов. Предоставленное регулярное выражение сопоставляется с URL-путем, и если оно совпадает, сервер заменяет любые совпадения в скобках в заданную строку и использует ее в качестве имени файла. Например, для активации стандарта /cgi-bin можно использовать:

 ScriptAliasMatch "^/cgi-bin(.*)" "/usr/local/apache/cgi-bin$1" 

Что касается AliasMatch, здесь доступен весь спектр возможностей регулярных выражений . Например, можно создать псевдоним с нечувствительным к регистру соответствием URL-пути:

 ScriptAliasMatch "(?i)^/cgi-bin(.*)" "/usr/local/apache/cgi-bin$1" 

Соображения, связанные с различием между Alias и , AliasMatch также применимы к различию между ScriptAlias и ScriptAliasMatch . Подробнее см AliasMatch .



 <         > 

Пункты:   85    86    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    163    164    165    166    167    168    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    203    204    205    206    207    208    209    210    211    212    213  

Рейтинг@Mail.ru