Модуль Apache mod_alias

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

Статус модуля: Base

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

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

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

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

Смотрите также: Полное руководство по mod_rewrite

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

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

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

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

Alias "/foo/bar" "/baz"
Alias "/foo" "/gaq"

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

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

Директива Alias

Описание: сопоставляет URL-адреса с расположениями файловой системы.

Синтаксис: Alias [URL-путь] путь-к-файлу|путь-к-директории

Контекст: конфигурация сервера, виртуальный хост, каталог

Модуль: 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 путь-к-файлу|путь-к-директории

Контекст: конфигурация сервера, виртуальный хост

Модуль: 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-путем.

Директива Directive

Описание: отправляет внешнее перенаправление с просьбой к клиенту получить другой URL-адрес.

Синтаксис: Redirect [статус] [URL-путь] URL

Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess

Переопределить: FileInfo

Модуль: mod_alias

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

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

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

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

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

# Перенаправление на URL на том же хосте
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.

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

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

permanent (постоянный)

Возвращает постоянный статус перенаправления (301), указывающий, что ресурс перемещён навсегда.

temp (временный)

Возвращает временный статус перенаправления (302). Это значение по умолчанию.

seeother (смотри другой)

Возвращает статус See Other «Смотри другое» (303), указывающий, что ресурс был заменён.

gone (ушёл)

Возвращает статус «Gone» (410), указывающий, что ресурс был окончательно удалён. Когда используется этот статус, аргумент URL-адреса следует опускать.

Другие коды состояния могут быть возвращены путём указания числового кода состояния в качестве значения статуса. Если статус находится между 300 и 399, должен присутствовать аргумент URL. Если статус не находится в диапазоне от 300 до 399, аргумент URL-адреса должен быть опущен. Статус должен быть действительным кодом статуса HTTP, известным HTTP-серверу Apache.

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 [статус] 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-путь URL

Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess

Переопределить: FileInfo

Модуль: mod_alias

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

Директива RedirectRelative

Описание: разрешает относительные цели перенаправления.

Синтаксис: RedirectRelative OFF|ON

По умолчанию: RedirectRelative OFF

Контекст: конфигурация сервера, виртуальный хост, каталог

Модуль: mod_alias

Совместимость: 2.5.1 и новее

По умолчанию, если целевой URL-адрес директивы Redirect является относительным URL-адресом, начинающимся с символа '/', сервер преобразует его в абсолютный URL-адрес перед ответом клиенту. Если для параметра RedirectRelative установлено значение «ON», относительный URL-адрес предоставляется клиенту напрямую.

Директива RedirectTemp

Описание: отправляет внешнее временное перенаправление с просьбой к клиенту получить другой URL-адрес.

Синтаксис: RedirectTemp URL-путь URL

Контекст: конфигурация сервера, виртуальный хост, каталог, .htaccess

Переопределить: FileInfo

Модуль: mod_alias

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

Директива ScriptAlias

Описание: сопоставляет URL-адрес с расположением файловой системы и назначает цель как сценарий CGI.

Синтаксис: ScriptAlias [URL-путь] путь-к-файлу|путь-к-директории

Контекст: конфигурация сервера, виртуальный хост, каталог

Статус: База

Модуль: mod_alias

Директива ScriptAlias имеет то же поведение, что и директива Alias, за исключением того, что, за исключением того, что она помечает целевой каталог как содержащий сценарии CGI, которые будут обрабатываться обработчиком cgi-script 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>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

wp-puzzle.com logo