Модуль Apache mod_alias
| Описание: | Обеспечивает отображение различных частей файловой системы хоста в дереве документов и перенаправление URL-адресов |
|---|---|
| Статус: | Базовый |
| Идентификатор модуля: | alias_module |
| Файл исходного кода: | mod_alias.c |
Краткое описание
Директивы этого модуля позволяют манипулировать и контролировать URL-адреса по мере их поступления на сервер. Директивы Alias и ScriptAlias используются для сопоставления URL-адресов и путей к файлам в файловой системе. Это позволяет обслуживать содержимое, которое не находится непосредственно под DocumentRoot, в качестве части дерева веб-документов. Директива ScriptAlias дополнительно отмечает целевую директорию как содержащую только скрипты CGI.
Директивы Redirect используются для инструкции клиентам выполнить новый запрос с другим URL-адресом. Они часто используются, когда ресурс переместился в новое местоположение.
Когда директивы Alias, ScriptAlias и Redirect используются внутри раздела <Location> или <LocationMatch>, можно использовать синтаксис выражений синтаксис выражений для манипулирования целевым путем или URL-адресом.
mod_alias предназначен для выполнения простых задач по манипуляции URL-адресами. Для более сложных задач, таких как манипулирование строкой запроса, используйте инструменты, предоставляемые mod_rewrite.
Порядок обработки
Псевдонимы и перенаправления, возникающие в разных контекстах, обрабатываются как другие директивы в соответствии со стандартными правилами объединения. Но когда несколько псевдонимов или перенаправлений встречаются в одном контексте (например, в одном разделе <VirtualHost> ), они обрабатываются в определенном порядке.
Сначала обрабатываются все перенаправления, а затем псевдонимы, и поэтому запрос, соответствующий директиве Redirect или RedirectMatch, никогда не будет иметь примененные псевдонимы. Во-вторых, псевдонимы и перенаправления обрабатываются в порядке их появления в конфигурационных файлах, причем первое совпадение имеет приоритет.
По этой причине, когда два или более из этих директив применяются к одному и тому же подпути, вы должны указать самый конкретный путь первым, чтобы все директивы имели эффект. Например, следующая конфигурация будет работать как ожидается:
Alias "/foo/bar" "/baz" Alias "/foo" "/gaq"
Но если вышеперечисленные две директивы были переставлены местами, /foo Alias всегда будет соответствовать запросу раньше, чем /foo/bar Alias, поэтому последняя директива будет проигнорирована.
Когда директивы Alias, ScriptAlias и Redirect используются внутри раздела <Location> или <LocationMatch>, эти директивы будут иметь приоритет над любыми глобально определенными директивами Alias, ScriptAlias и Redirect.
Директива Alias
| Описание: | Сопоставляет URL-адреса с местоположениями на файловой системе |
|---|---|
| Синтаксис: | Alias [URL-path] file-path|directory-path |
| Контекст: | конфигурация сервера, виртуальный хост, директория |
| Статус: | Базовый |
| Модуль: | mod_alias |
Директива Alias позволяет хранить документы в локальной файловой системе, отличной от DocumentRoot. URL-адреса с путем (после декодирования %) начинающимся с URL-путь будут сопоставлены с локальными файлами, начинающимися с путь-к-каталогу. URL-путь чувствителен к регистру, даже на файловых системах, нечувствительных к регистру.
Alias "/image" "/ftp/pub/image"
Запрос на http://example.com/image/foo.gif заставит сервер вернуть файл /ftp/pub/image/foo.gif. Сопоставляются только полные сегменты пути, поэтому вышеупомянутый псевдоним не будет соответствовать запросу на http://example.com/imagefoo.gif. Для более сложного сопоставления с использованием регулярных выражений см. директиву AliasMatch.
Обратите внимание, что если вы включаете конечный / в URL-путь, то сервер потребует конечный / для расширения псевдонима. То есть, если вы используете
Alias "/icons/" "/usr/local/apache/icons/"
то URL /icons не будет алиасирован, так как в нем отсутствует конечный /. Аналогично, если вы опустите слеш в URL-путь, вы должны также опустить его из путь-к-файлу.
Обратите внимание, что вам может потребоваться указать дополнительные разделы <Directory>, которые охватывают назначение псевдонимов. Псевдонимизация происходит до проверки разделов <Directory>, поэтому затронуты только назначения псевдонимов. (Обратите внимание, что разделы <Location> выполняются один раз перед выполнением псевдонимов, поэтому они будут применяться.)
В частности, если вы создаете псевдоним на каталог вне вашего DocumentRoot, вам может потребоваться явно разрешить доступ к целевому каталогу.
Alias "/image" "/ftp/pub/image"
<Directory "/ftp/pub/image">
Require all granted
</Directory> Любое количество слешей в параметре URL-путь соответствует любому количеству слешей в запрошенном URL-пути.
Если директива Alias используется внутри раздела <Location> или <LocationMatch>, URL-путь опускается, а путь к файлу интерпретируется с использованием синтаксиса выражений.
Этот синтаксис доступен в Apache 2.4.19 и более поздних версиях.
<Location "/image">
Alias "/ftp/pub/image"
</Location>
<LocationMatch "/error/(?<NUMBER>[0-9]+)">
Alias "/usr/local/apache/errors/%{env:MATCH_NUMBER}.html"
</LocationMatch> Директива AliasMatch
| Описание: | Сопоставляет 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:
Alias "/image/" "/ftp/pub/image/"
Это НЕ эквивалентно - не делайте этого! Это отправит все запросы, в которых есть /image/ где угодно, в /ftp/pub/image/:
AliasMatch "/image/" "/ftp/pub/image/"
Вот что вам нужно, чтобы получить тот же эффект:
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 |
| Переопределение: | FileInfo |
| Статус: | Базовый |
| Модуль: | mod_alias |
Директива Redirect сопоставляет старый URL с новым, прося клиента повторно получить ресурс по новому расположению.
Старый URL-путь — это чувствительный к регистру (%-декодированный) путь, начинающийся с косой черты. Относительный путь не допускается.
Новый URL может быть либо абсолютным URL, начинающимся со схемы и имени хоста, либо URL-путем, начинающимся с косой черты. В последнем случае к текущему схеме и имени хоста сервера будет добавлено.
Затем любой запрос, начинающийся с URL-пути, вернёт клиенту запрос на перенаправление по адресу целевого URL. Дополнительная информация о пути за пределами совпавшего URL-пути будет добавлена к целевому URL.
# Redirect to a URL on a different host Redirect "/service" "http://foo2.example.com/service" # Redirect to a URL on the same host Redirect "/one" "/two"
Если клиент запросит 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 будут удалены.
Совпадают только полные сегменты пути, поэтому вышеприведенный пример не будет соответствовать запросу к http://example.com/servicefoo.txt. Для более сложного сопоставления с помощью синтаксиса выражения опустите аргумент URL-пути, как описано ниже. В качестве альтернативы, для сопоставления с использованием регулярных выражений, см. директиву RedirectMatch.
Примечание
Директивы Redirect имеют приоритет над Alias и ScriptAlias директивами, независимо от их порядка в файле конфигурации. Директивы Redirect внутри Location имеют приоритет над директивами Redirect и Alias с URL-путем.
Если аргумент status не указан, перенаправление будет «временным» (HTTP-статус 302). Это указывает клиенту, что ресурс временно перемещён. Аргумент status можно использовать для возврата других HTTP-кодов состояния:
- permanent
- Возвращает постоянное перенаправление (301), указывая, что ресурс перемещён постоянно.
- temp
- Возвращает временное перенаправление (302). Это значение по умолчанию.
- seeother
- Возвращает статус «See Other» (303), указывающий, что ресурс был заменён.
- gone
- Возвращает статус «Gone» (410), указывающий, что ресурс был удалён постоянно. При использовании этого статуса аргумент URL следует опустить.
Другие коды состояния могут быть возвращены, указав числовой код состояния в качестве значения status. Если статус находится в диапазоне от 300 до 399, аргумент URL должен быть присутствовать. Если статус не находится в диапазоне от 300 до 399, аргумент URL должен быть опущен. Статус должен быть допустимым HTTP-кодом состояния, известным Apache HTTP Server (см. функцию send_error_response в http_protocol.c).
Redirect permanent "/one" "http://example.com/two" Redirect 303 "/three" "http://example.com/other"
Если директива Redirect используется внутри раздела <Location> или <LocationMatch> с пропущенным URL-путем, то параметр URL будет интерпретирован с использованием синтаксиса выражения.
Этот синтаксис доступен в Apache 2.4.19 и более поздних версиях.
<Location "/one">
Redirect permanent "http://example.com/two"
</Location>
<Location "/three">
Redirect 303 "http://example.com/other"
</Location>
<LocationMatch "/error/(?<NUMBER>[0-9]+)">
Redirect permanent "http://example.com/errors/%{env:MATCH_NUMBER}.html"
</LocationMatch> Директива RedirectMatch
| Описание: | Отправляет внешнее перенаправление на основе соответствия текущего URL регулярному выражению |
|---|---|
| Синтаксис: | RedirectMatch [status] regex URL |
| Контекст: | настройка сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | FileInfo |
| Статус: | Базовый |
| Модуль: | 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 |
| Переопределение: | FileInfo |
| Статус: | Базовый |
| Модуль: | mod_alias |
Эта директива сообщает клиенту, что перенаправление постоянное (статус 301). Точно эквивалентно Redirect permanent.
Директива RedirectTemp
| Описание: | Отправляет временное внешнее перенаправление, прося клиента получить другой URL |
|---|---|
| Синтаксис: | RedirectTemp URL-path URL |
| Контекст: | настройка сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | FileInfo |
| Статус: | Базовый |
| Модуль: | mod_alias |
Эта директива сообщает клиенту, что перенаправление только временное (статус 302). Точно эквивалентно Redirect temp.
Директива ScriptAlias
| Описание: | Сопоставляет URL с местоположением на файловой системе и обозначает целевой элемент как CGI-скрипт |
|---|---|
| Синтаксис: | ScriptAlias [URL-path] file-path|directory-path |
| Контекст: | настройка сервера, виртуальный хост, каталог |
| Статус: | Базовый |
| Модуль: | mod_alias |
Директива ScriptAlias имеет такое же поведение, как директива Alias, за исключением того, что она также помечает целевой каталог как содержащий CGI-скрипты, которые будут обработаны обработчиком cgi-скриптов модуля mod_cgi. URL с чувствительным к регистру (%-декодированным) путём, начинающимся с URL-пути, будут сопоставлены со скриптами, начинающимися со второго аргумента, который представляет собой полный путь в локальной файловой системе.
ScriptAlias "/cgi-bin/" "/web/cgi-bin/"
Запрос на http://example.com/cgi-bin/foo заставит сервер запустить скрипт /web/cgi-bin/foo. Эта настройка по существу эквивалентна:
Alias "/cgi-bin/" "/web/cgi-bin/"
<Location "/cgi-bin">
SetHandler cgi-script
Options +ExecCGI
</Location> ScriptAlias также можно использовать в сочетании со скриптом или обработчиком, который у вас есть. Например:
ScriptAlias "/cgi-bin/" "/web/cgi-handler.pl"
В этом случае все запрошенные файлы в /cgi-bin/ будут обрабатываться с помощью вами настроенного файла, что позволяет использовать собственный пользовательский обработчик. Вы можете использовать его в качестве оболочки для CGI, чтобы добавить содержимое или выполнить другие особые действия.
DocumentRoot, чтобы случайно не раскрыть их исходный код при изменении конфигурации. Директива ScriptAlias делает это легко, сопоставляя URL и одновременно обозначая CGI-скрипты. Если вы решите разместить ваши CGI-скрипты в каталоге, уже доступном через веб, не используйте ScriptAlias. Используйте вместо этого <Directory>, SetHandler, и Options, как показано ниже: <Directory "/usr/local/apache2/htdocs/cgi-bin">
SetHandler cgi-script
Options ExecCGI
</Directory> Это необходимо, так как несколько URL-путей могут соответствовать одному и тому же расположению на файловой системе, потенциально обходя ScriptAlias и раскрывая исходный код CGI-скриптов, если они не ограничены разделом Directory. Если директива ScriptAlias используется внутри раздела <Location> или <LocationMatch> с опушенным URL-путем, параметр URL будет интерпретирован с использованием синтаксиса выражения.
Этот синтаксис доступен в Apache 2.4.19 и более поздних версиях.
<Location "/cgi-bin">
ScriptAlias "/web/cgi-bin/"
</Location>
<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 для получения подробной информации.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_alias.html