Apache Версия 2.0 Сервера HTTP
этот документ объясняет, как Apache использует URL запроса определить местоположение файловой системы, чтобы служить файлу.
Связанные Модули | Связанные Директивы |
---|---|
в решении, какой файл служить для данного запроса, поведение Апача по умолчанию состоит в том, чтобы взять ДОРОЖКУ URL для запроса (часть URL после hostname и порта) и добавить это до конца
DocumentRoot
определенный в ваших файлах конфигурации. Поэтому, файлы и справочники под
DocumentRoot
составить дерево основного документа, которое будет видимо от сети.
Apache также способен к
Virtual Hosting
, где сервер получает запросы о больше чем одном хозяине. В этом случае, различное
DocumentRoot
может быть определен для каждого действительного хозяина, или альтернативно, директивы, обеспеченные модулем
mod_vhost_alias
может использоваться, чтобы динамически определить соответствующее место, чтобы служить содержанию, основанному на требуемом IP адресе или hostname.
есть часто обстоятельства, где необходимо позволить доступ сети к частям файловой системы, которые не строго под
DocumentRoot
. Apache предлагает несколько различных способов достигнуть этого. На системах Unix, символические связи могут принести другие части файловой системы под
DocumentRoot
. для соображений безопасности, Apache будет следовать за символическими связями только если
Options
урегулирование для уместного справочника включает
FollowSymLinks
или
SymLinksIfOwnerMatch
.
альтернативно,
Alias
директива нанесет на карту любую часть файловой системы в место сети. Например, с
Alias /docs /var/web
URL
http://www.example.com/docs/dir/file.html
от будет служиться
/var/web/dir/file.html
.
ScriptAlias
директива работает тот же самый путь, с дополнительным эффектом, что все содержание, расположенное в целевой дорожке рассматривают как подлинники CGI.
для ситуаций, где Вы требуете дополнительной гибкости, Вы можете использовать
AliasMatch
и
ScriptAliasMatch
директивы, чтобы сделать мощное регулярное выражение базировали соответствие и замену. Например,
ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+) /home/$1/cgi-bin/$2
нанесет на карту запрос к
http://example.com/~user/cgi-bin/script.cgi
к дорожке
/home/user/cgi-bin/script.cgi
и рассмотрит получающийся файл как подлинник CGI.
традиционно на системах Unix, домашний каталог детали
пользователь
может упомянуться
~user/
. модуль
mod_userdir
расширяет эту идею сети, позволяя файлы под домашним каталогом каждого пользователя быть полученным доступ, используя URL, типа следующего.
http://www.example.com/~user/file.html
для соображений безопасности, несоответствующее дать прямой доступ к домашнему каталогу пользователя от сети. Поэтому,
UserDir
директива определяет директивную нижнюю часть домашний каталог пользователя, где файлы сети расположены. Используя урегулирование по умолчанию
Userdir public_html
, вышеупомянутый URL наносит на карту к файлу в справочнике как
/home/user/public_html/file.html
где
/home/user/
является домашним каталогом пользователя как определено в
/etc/passwd
.
есть также несколько других форм
Userdir
директива, которую Вы можете использовать на системах где
/etc/passwd
не содержит местоположение домашнего каталога.
некоторые люди находят "~" символ (который часто кодируется на сети как
%7e
), чтобы быть неуклюжим и предпочесть использовать дополнительную вереницу, чтобы представить пользовательские справочники. Эти функциональные возможности не поддержаны mod_userdir. Однако, если домашние каталоги пользователей структурированы регулярным способом, то возможно использовать
AliasMatch
директива, чтобы достигнуть желательного эффекта. Например, чтобы сделать
http://www.example.com/upages/user/file.html
карта к
/home/user/public_html/file.html
, используйте следующий
AliasMatch
директива:
AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*) /home/$1/public_html/$2
директивы конфигурации, обсужденные в вышеупомянутых секциях говорят Apacheу становиться довольным от определенного места в файловой системе и возвращать это клиенту. Иногда, это желательно вместо этого сообщить клиенту, что требуемое содержание расположено в различном URL, и инструктировать клиента делать новый запрос с новым URL. Это называют
переназначение
и осуществлен
Redirect
директива. Например, если содержание справочника
/foo/
под
DocumentRoot
перемещены в новый справочник
/bar/
, Вы можете проинструктировать клиентов просить содержание в новом местоположении следующим образом:
Redirect permanent /foo/ http://www.example.com/bar/
это переадресует любую ДОРОЖКУ URL, начинающуюся в
/foo/
к той же самой дорожке URL на
www.example.com
сервер с
/bar/
замененный
/foo/
. Вы можете переадресовать клиентов к любому серверу, не только сервер происхождения.
Apache также обеспечивает a
RedirectMatch
директива для более сложных проблем переписывания. Например, чтобы переадресовать запросы о домашней странице участка к различному участку, но оставить все другие запросы в покое, использование следующая конфигурация:
RedirectMatch permanent ^/$ http://www.example.com/startpage.html
альтернативно, чтобы временно переадресовать все страницы на одном участке к специфической странице на другом участке, используйте следующее:
RedirectMatch temp .* http://othersite.example.com/startpage.html
Apache также позволяет Вам приносить отдаленные документы в место URL местного сервера. Эту технику называют перемена proxying потому что сервер сети действует как сервер по доверенности, принося документы от отдаленного сервера и возвращая их клиенту. Это отличается от нормального proxying, потому что, клиенту, кажется, что документы происходят в обратном сервере по доверенности.
в следующем примере, когда клиенты просят документы под
/foo/
справочник, сервер приносит те документы от
/bar/
справочник на
internal.example.com
и возвращает их клиенту, как будто они были от местного сервера.
ProxyPass /foo/ http://internal.example.com/bar/
ProxyPassReverse /foo/ http://internal.example.com/bar/
ProxyPass
формирует сервер, чтобы принести соответствующие документы, в то время как
ProxyPassReverse
директива переписывает, переадресовывает возникновение в
internal.example.com
так, чтобы они предназначались для соответствующего справочника на местном сервере. Важно отметить, однако, что связи в документах не будут переписаны. Так любые абсолютные связи на
internal.example.com
приведет к клиенту, убегающему из сервера по доверенности и просящему непосредственно от
internal.example.com
.
когда еще более мощная замена требуется, двигатель переписывания, обеспеченный
mod_rewrite
может быть полезным. Директивы, обеспеченные этим модулем используют особенности запроса, типа типа браузера или исходного IP адреса в решении от того, где служить содержанию. Кроме того, mod_rewrite может использовать внешние файлы базы данных или программы, чтобы решить, как обращаться с запросом. Двигатель переписывания способен к выполнению всех трех типов картографий, обсужденных выше: внутренний переадресовывает (псевдонимы), внешние переадресовывает, и proxying. Много практических примеров, использующих mod_rewrite обсуждены в
URL Rewriting Guide
.
неизбежно, URL будут требовать, для которого никакой файл соответствия не может быть найден в файловой системе. Это может случиться по нескольким причинам. В некоторых случаях, это может быть результат перемещающихся документов от одного местоположения до другого. В этом случае, лучше использовать URL redirection сообщать клиентам нового местоположения ресурса. Таким образом, Вы можете уверить, что старые закладки и связи продолжат работать, даже при том, что ресурс - в новом местоположении.
другая общая причина "Файла Не Найденные" ошибки - случайная неверная печать URL, или непосредственно в браузере, или в связях HTML. Апач обеспечивает модуль
mod_speling
(так) помогать с этой проблемой. Когда этот модуль активизирован, это перехватит "Файл Не Найденные" ошибки и будет искать ресурс с подобным именем файла. Если один такой файл будет найден, то mod_speling пошлет HTTP, переадресовывают клиенту, сообщающему этому относительно правильного местоположения. Если несколько "близких" файлов будут найдены, то список доступных альтернатив будет представлен клиенту.
особенно полезная особенность mod_speling, - то, что это сравнит имена файла без уважения к случаю. Это может помочь системам, где пользователи не сознают чувствительную к случаю природу URL и файловой системы unix. Но использование mod_speling для чего-то большего чем случайного исправления URL может поместить дополнительный груз в сервер, так как каждый "неправильный" запрос сопровождается переназначением URL и новым запросом от клиента.
если все попытки определять местонахождение содержания терпят неудачу, Apache возвращает ошибочную страницу с кодексом 404 статуса HTTP (файл, не найденный). Появлением этой страницы управляют с
ErrorDocument
директива и может быть настроена в гибкой манере как обсуждено в
Custom error responses
и
International Server Error Responses
документы.