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-путь будут сопоставлены с локальными файлами, начинающимися с путь-к-каталогу. 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-путем.

END_OF_DOCUMENT_MARKER

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

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

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

См. также

  • Руководство по 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