Модуль 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-path, будут сопоставлены с локальными файлами, путь к которым начинается с directory-path. В URL-path учитывается регистр символов, даже в файловых системах, нечувствительных к регистру.
Alias "/image" "/ftp/pub/image"
Запрос к http://example.com/image/foo.gif приведёт к тому, что сервер вернёт файл /ftp/pub/image/foo.gif. Сопоставляются только полные сегменты пути, поэтому указанный выше псевдоним не будет соответствовать запросу к http://example.com/imagefoo.gif. О сопоставлении с помощью регулярных выражений см. директиву AliasMatch.
Обратите внимание: если в конце URL-path указать /, сервер потребует завершающий / для раскрытия псевдонима. То есть, если использовать
Alias "/icons/" "/usr/local/apache/icons/"
URL /icons не будет сопоставлен с псевдонимом, поскольку в нём отсутствует завершающий /. Аналогично, если не указывать косую черту в URL-path, её также нельзя указывать в file-path.
Обратите внимание, что может потребоваться указать дополнительные секции <Directory>, охватывающие целевое расположение псевдонимов. Псевдонимы обрабатываются до проверки секций <Directory>, поэтому они влияют только на целевые расположения псевдонимов. (Однако секции <Location> обрабатываются один раз до создания псевдонимов, поэтому они будут применены.)
В частности, если вы создаёте Alias для каталога вне вашего DocumentRoot, может потребоваться явно разрешить доступ к целевому каталогу.
Alias "/image" "/ftp/pub/image"
<Directory "/ftp/pub/image">
Require all granted
</Directory> Любое количество косых черт в параметре URL-path соответствует такому же количеству косых черт в запрошенном URL-пути.
Если директива Alias используется в секции <Location> или <LocationMatch>, URL-path опускается, а file-path интерпретируется с использованием синтаксиса выражений.
Этот синтаксис доступен в 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> Обратите внимание: если директива AliasPreservePath включена, полный путь сопоставляется с целевым расположением. Если директива отключена, все URL сопоставляются с одним целевым URL.
# /files/foo and /files/bar mapped to /ftp/pub/files/foo and /ftp/pub/files/bar
<Location "/files">
AliasPreservePath on
Alias "/ftp/pub/files"
</Location>
# /errors/foo and /errors/bar mapped to /var/www/errors.html
<Location "/errors">
AliasPreservePath off
Alias "/var/www/errors.html"
</Location> Директива 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-путём.
Директива AliasPreservePath
| Описание: | Сохраняет полный путь после псевдонима в расположении. |
|---|---|
| Синтаксис: | AliasPreservePath OFF|ON |
| Значение по умолчанию: | AliasPreservePath OFF |
| Контекст: | конфигурация сервера, виртуальный хост, каталог |
| Статус: | Базовый |
| Модуль: | mod_alias |
| Совместимость: | 2.4.58 и более поздние версии |
При использовании двухпараметровой версии директивы Alias сохраняется полный путь после псевдонима. При использовании однопараметровой версии директивы Alias внутри директивы Location полный путь отбрасывается, а все URL сопоставляются с целевым выражением.
Чтобы однопараметровая версия директивы Alias сохраняла пути так же, как двухпараметровая версия директивы Alias, включите этот параметр.
Директива Redirect
| Описание: | Выполняет внешнее перенаправление, предлагая клиенту получить другой URL |
|---|---|
| Синтаксис: | Redirect [status] [URL-path] URL |
| Контекст: | конфигурация сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | FileInfo |
| Статус: | Базовый |
| Модуль: | mod_alias |
Директива Redirect сопоставляет старый URL с новым, предлагая клиенту повторно запросить ресурс по новому адресу.
Старый URL-path — это путь с учётом регистра (после %-декодирования), начинающийся с косой черты. Относительный путь не допускается.
Новый URL может быть абсолютным URL, начинающимся со схемы и имени хоста, либо URL-путём, начинающимся с косой черты. Во втором случае будут добавлены схема и имя хоста текущего сервера.
Затем любой запрос, начинающийся с URL-path, приведёт к отправке клиенту запроса перенаправления на целевой URL. Дополнительная информация о пути за пределами совпавшего URL-path будет добавлена к целевому 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-path, как описано ниже. Для сопоставления с помощью регулярных выражений см. директиву RedirectMatch.
Примечание
Директивы Redirect имеют приоритет над директивами Alias и ScriptAlias независимо от порядка их расположения в файле конфигурации. Директивы Redirect внутри Location имеют приоритет над директивами Redirect и Alias с аргументом URL-path.
Если аргумент 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-path, параметр 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.
Директива RedirectRelative
| Описание: | Разрешает относительные адреса перенаправления. |
|---|---|
| Синтаксис: | RedirectRelative On|Off |
| Значение по умолчанию: | RedirectRelative Off |
| Контекст: | конфигурация сервера, виртуальный хост, каталог |
| Статус: | Базовый |
| Модуль: | mod_alias |
| Совместимость: | 2.4.58 и более поздние версии |
По умолчанию, если целевой URL директивы Redirect является относительным URL, начинающимся с символа «/», сервер преобразует его в абсолютный URL, прежде чем ответить клиенту. Если установить для RedirectRelative значение "On", относительный URL будет передан клиенту без изменений.
Директива 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-script модуля mod_cgi. URL с путём с учётом регистра (после %-декодирования), начинающимся с URL-path, будут сопоставлены со сценариями, расположенными по второму аргументу — полному пути в локальной файловой системе.
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-path могут сопоставляться с одним и тем же расположением в файловой системе, что потенциально позволяет обойти ScriptAlias и раскрыть исходный код CGI-сценариев, если доступ к ним не ограничен секцией Directory.Если директива ScriptAlias используется в секции <Location> или <LocationMatch> без URL-path, параметр 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