Spec-Zone.ru › Apache HTTP Server

Модуль 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, чтобы добавлять содержимое или выполнять другие специальные действия.

Безопаснее не размещать 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>

См. также

  • Руководство по CGI

Директива 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API