mirror of
				https://github.com/apache/httpd.git
				synced 2025-10-31 19:10:37 +03:00 
			
		
		
		
	in particular, the non-english files, to make sure I did not screw anything up. They look fine to me. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91112 13f79535-47bb-0310-9956-ffa450edef68
		
			
				
	
	
		
			297 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			297 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
	
	
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 | |
|     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 | |
| 
 | |
| <html xmlns="http://www.w3.org/1999/xhtml">
 | |
|   <head>
 | |
|     <meta name="generator" content="HTML Tidy, see www.w3.org" />
 | |
| 
 | |
|     <title>Mapping URLs to Filesystem Locations - Apache HTTP
 | |
|     Server</title>
 | |
|   </head>
 | |
|   <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
 | |
| 
 | |
|   <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
 | |
|   vlink="#000080" alink="#FF0000">
 | |
|     <!--#include virtual="header.html" -->
 | |
| 
 | |
|     <h1 align="center">Mapping URLs to Filesystem Locations</h1>
 | |
| 
 | |
|     <p>This document explains how Apache uses the URL of a request
 | |
|     to determine the filesystem location from which to serve a
 | |
|     file.</p>
 | |
| 
 | |
|     <ul>
 | |
|       <li><a href="#documentroot">DocumentRoot</a></li>
 | |
| 
 | |
|       <li><a href="#outside">Files Outside the
 | |
|       DocumentRoot</a></li>
 | |
| 
 | |
|       <li><a href="#user">User Directories</a></li>
 | |
| 
 | |
|       <li><a href="#redirect">URL Redirection</a></li>
 | |
| 
 | |
|       <li><a href="#rewrite">Rewrite Engine</a></li>
 | |
| 
 | |
|       <li><a href="#notfound">File Not Found</a></li>
 | |
|     </ul>
 | |
|     <hr />
 | |
| 
 | |
|     <table border="1">
 | |
|       <tr>
 | |
|         <td valign="top"><strong>Related Modules</strong><br />
 | |
|          <br />
 | |
|          <a href="mod/mod_alias.html">mod_alias</a><br />
 | |
|          <a href="mod/mod_rewrite.html">mod_rewrite</a><br />
 | |
|          <a href="mod/mod_userdir.html">mod_userdir</a><br />
 | |
|          <a href="mod/mod_speling.html">mod_speling</a><br />
 | |
|          <a
 | |
|         href="mod/mod_vhost_alias.html">mod_vhost_alias</a><br />
 | |
|          </td>
 | |
| 
 | |
|         <td valign="top"><strong>Related Directives</strong><br />
 | |
|          <br />
 | |
|          <a href="mod/mod_alias.html#alias">Alias</a><br />
 | |
|          <a
 | |
|         href="mod/mod_alias.html#aliasmatch">AliasMatch</a><br />
 | |
|          <a
 | |
|         href="mod/mod_speling.html#checkspelling">CheckSpelling</a><br />
 | |
|          <a
 | |
|         href="mod/core.html#documentroot">DocumentRoot</a><br />
 | |
|          <a
 | |
|         href="mod/core.html#errordocument">ErrorDocument</a><br />
 | |
|          <a href="mod/core.html#options">Options</a><br />
 | |
|          <a href="mod/mod_alias.html#redirect">Redirect</a><br />
 | |
|          <a
 | |
|         href="mod/mod_alias.html#redirectmatch">RedirectMatch</a><br />
 | |
|          <a
 | |
|         href="mod/mod_rewrite.html#RewriteCond">RewriteCond</a><br />
 | |
|          <a
 | |
|         href="mod/mod_rewrite.html#RewriteRule">RewriteRule</a><br />
 | |
|          <a
 | |
|         href="mod/mod_alias.html#scriptalias">ScriptAlias</a><br />
 | |
|          <a
 | |
|         href="mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a><br />
 | |
|          <a href="mod/mod_userdir.html#userdir">UserDir</a><br />
 | |
|          </td>
 | |
|       </tr>
 | |
|     </table>
 | |
| 
 | |
|     <h2><a id="documentroot"
 | |
|     name="documentroot">DocumentRoot</a></h2>
 | |
| 
 | |
|     <p>In deciding what file to serve for a given request, Apache's
 | |
|     default behavior is to take the URL-Path for the request (the
 | |
|     part of the URL following the hostname and port) and add it to
 | |
|     the end of the <a
 | |
|     href="mod/core.html#documentroot">DocumentRoot</a> specified in
 | |
|     your configuration files. Therefore, the files and directories
 | |
|     underneath the <code>DocumentRoot</code> make up the basic
 | |
|     document tree which will be visible from the web.</p>
 | |
| 
 | |
|     <p>Apache is also capable of <a href="vhosts/">Virtual
 | |
|     Hosting</a>, where the server receives requests for more than
 | |
|     one host. In this case, a different <code>DocumentRoot</code>
 | |
|     can be specified for each virtual host, or alternatively, the
 | |
|     directives provided by the module <a
 | |
|     href="mod/mod_vhost_alias.html">mod_vhost_alias</a> can be used
 | |
|     to dynamically determine the appropriate place from which to
 | |
|     serve content based on the requested IP address or
 | |
|     hostname.</p>
 | |
| 
 | |
|     <h2><a id="outside" name="outside">Files Outside the
 | |
|     DocumentRoot</a></h2>
 | |
| 
 | |
|     <p>There are frequently circumstances where it is necessary to
 | |
|     allow web access to parts of the filesystem that are not
 | |
|     strictly underneath the <a
 | |
|     href="mod/core.html#documentroot">DocumentRoot</a>. Apache
 | |
|     offers several different ways to accomplish this. On Unix
 | |
|     systems, symbolic links can bring other parts of the filesystem
 | |
|     under the <code>DocumentRoot</code>. For security reasons,
 | |
|     Apache will follow symbolic links only if the <a
 | |
|     href="mod/core.html#options">Options</a> setting for the
 | |
|     relevant directory includes <code>FollowSymLinks</code> or
 | |
|     <code>SymLinksIfOwnerMatch</code>.</p>
 | |
| 
 | |
|     <p>Alternatively, the <a
 | |
|     href="mod/mod_alias.html#alias">Alias</a> directive will map
 | |
|     any part of the filesystem into the web space. For example,
 | |
|     with</p>
 | |
| 
 | |
|     <blockquote>
 | |
|       <code>Alias /docs /var/web/</code>
 | |
|     </blockquote>
 | |
| 
 | |
|     <p>the URL
 | |
|     <code>http://www.example.com/docs/dir/file.html</code> will be
 | |
|     served from <code>/var/web/dir/file.html</code>. The <a
 | |
|     href="mod/mod_alias.html#scriptalias">ScriptAlias</a> directive
 | |
|     works the same way, with the additional effect that all content
 | |
|     located at the target path is treated as CGI scripts.</p>
 | |
| 
 | |
|     <p>For situations where you require additional flexibility, you
 | |
|     can use the <a
 | |
|     href="mod/mod_alias.html#aliasmatch">AliasMatch</a> and <a
 | |
|     href="mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a>
 | |
|     directives to do powerful regular-expression based matching and
 | |
|     substitution. For example,</p>
 | |
| 
 | |
|     <blockquote>
 | |
|       <code>ScriptAliasMatch ^/~([^/]*)/cgi-bin/(.*)
 | |
|       /home/$1/cgi-bin/$2</code>
 | |
|     </blockquote>
 | |
| 
 | |
|     <p>will map a request to
 | |
|     <code>http://example.com/~user/cgi-bin/script.cgi</code> to the
 | |
|     path <code>/home/user/cgi-bin/script.cgi</code> and will treat
 | |
|     the resulting file as a CGI script.</p>
 | |
| 
 | |
|     <h2><a id="user" name="user">User Directories</a></h2>
 | |
| 
 | |
|     <p>Traditionally on Unix systems, the home directory of a
 | |
|     particular <em>user</em> can be referred to as
 | |
|     <code>~user/</code>. The module <a
 | |
|     href="mod/mod_userdir.html">mod_userdir</a> extends this idea
 | |
|     to the web by allowing files under each user's home directory
 | |
|     to be accessed using URLs such as the following.</p>
 | |
| 
 | |
|     <blockquote>
 | |
|       <code>http://www.example.com/~user/file.html</code>
 | |
|     </blockquote>
 | |
| 
 | |
|     <p>For security reasons, it is inappropriate to give direct
 | |
|     access to a user's home directory from the web. Therefore, the
 | |
|     <a href="mod/mod_userdir.html#userdir">UserDir</a> directive
 | |
|     specifies a directory underneath the user's home directory
 | |
|     where web files are located. Using the default setting of
 | |
|     <code>Userdir public_html</code>, the above URL maps to a file
 | |
|     at a directory like
 | |
|     <code>/home/user/public_html/file.html</code> where
 | |
|     <code>/home/user/</code> is the user's home directory as
 | |
|     specified in <code>/etc/passwd</code>.</p>
 | |
| 
 | |
|     <p>There are also several other forms of the
 | |
|     <code>Userdir</code> directive which you can use on systems
 | |
|     where <code>/etc/passwd</code> does not contain the location of
 | |
|     the home directory.</p>
 | |
| 
 | |
|     <p>Some people find the "~" symbol (which is often encoded on
 | |
|     the web as <code>%7e</code>) to be awkward and prefer to use an
 | |
|     alternate string to represent user directories. This
 | |
|     functionality is not supported by mod_userdir. However, if
 | |
|     users' home directories are structured in a regular way, then
 | |
|     it is possible to use the <a
 | |
|     href="mod/mod_alias.html#aliasmatch">AliasMatch</a> directive
 | |
|     to achieve the desired effect. For example, to make
 | |
|     <code>http://www.example.com/upages/user/file.html</code> map
 | |
|     to <code>/home/user/public_html/file.html</code>, use the
 | |
|     following <code>AliasMatch</code> directive:</p>
 | |
| 
 | |
|     <blockquote>
 | |
|       <code>AliasMatch ^/upages/([^/]*)/?(.*)
 | |
|       /home/$1/public_html/$2</code>
 | |
|     </blockquote>
 | |
| 
 | |
|     <h2><a id="redirect" name="redirect">URL Redirection</a></h2>
 | |
| 
 | |
|     <p>The configuration directives discussed in the above sections
 | |
|     tell Apache to get content from a specific place in the
 | |
|     filesystem and return it to the client. Sometimes, it is
 | |
|     desirable instead to inform the client that the requested
 | |
|     content is located at a different URL, and instruct the client
 | |
|     to make a new request with the new URL. This is called
 | |
|     <em>redirection</em> and is implemented by the <a
 | |
|     href="mod/mod_alias.html#redirect">Redirect</a> directive. For
 | |
|     example, if the contents of the directory <code>/foo/</code>
 | |
|     under the <code>DocumentRoot</code> are moved to the new
 | |
|     directory <code>/bar/</code>, you can instruct clients to
 | |
|     request the content at the new location as follows:</p>
 | |
| 
 | |
|     <blockquote>
 | |
|       <code>Redirect permanent /foo/
 | |
|       http://www.example.com/bar/</code>
 | |
|     </blockquote>
 | |
| 
 | |
|     <p>This will redirect any URL-Path starting in
 | |
|     <code>/foo/</code> to the same URL path on the
 | |
|     <code>www.example.com</code> server with <code>/bar/</code>
 | |
|     substituted for <code>/foo/</code>. You can redirect clients to
 | |
|     any server, not only the origin server.</p>
 | |
| 
 | |
|     <p>Apache also provides a <a
 | |
|     href="mod/mod_alias.html#redirectmatch">RedirectMatch</a>
 | |
|     directive for more complicated rewriting problems. For example,
 | |
|     to redirect requests for the site home page to a different
 | |
|     site, but leave all other requests alone, use the following
 | |
|     configuration:</p>
 | |
| 
 | |
|     <blockquote>
 | |
|       <code>RedirectMatch permanent ^/$
 | |
|       http://www.example.com/startpage.html</code>
 | |
|     </blockquote>
 | |
| 
 | |
|     <p>Alternatively, to temporarily redirect all pages on a site
 | |
|     to one particular page, use the following:</p>
 | |
| 
 | |
|     <blockquote>
 | |
|       <code>RedirectMatch temp .*
 | |
|       http://www.example.com/startpage.html</code>
 | |
|     </blockquote>
 | |
| 
 | |
|     <h2><a id="rewrite" name="rewrite">Rewriting Engine</a></h2>
 | |
| 
 | |
|     <p>When even more powerful substitution is required, the
 | |
|     rewriting engine provided by <a
 | |
|     href="mod/mod_rewrite.html">mod_rewrite</a> can be useful. The
 | |
|     directives provided by this module use characteristics of the
 | |
|     request such as browser type or source IP address in deciding
 | |
|     from where to serve content. In addition, mod_rewrite can use
 | |
|     external database files or programs to determine how to handle
 | |
|     a request. Many practical examples employing mod_rewrite are
 | |
|     discussed in the <a href="misc/rewriteguide.html">URL Rewriting
 | |
|     Guide</a>.</p>
 | |
| 
 | |
|     <h2><a id="notfound" name="notfound">File Not Found</a></h2>
 | |
| 
 | |
|     <p>Inevitably, URLs will be requested for which no matching
 | |
|     file can be found in the filesystem. This can happen for
 | |
|     several reasons. In some cases, it can be a result of moving
 | |
|     documents from one location to another. In this case, it is
 | |
|     best to use <a href="#redirect">URL redirection</a> to inform
 | |
|     clients of the new location of the resource. In this way, you
 | |
|     can assure that old bookmarks and links will continue to work,
 | |
|     even though the resource is at a new location.</p>
 | |
| 
 | |
|     <p>Another common cause of "File Not Found" errors is
 | |
|     accidental mistyping of URLs, either directly in the browser,
 | |
|     or in HTML links. Apache provides the module <a
 | |
|     href="mod/mod_speling.html">mod_speling</a> (sic) to help with
 | |
|     this problem. When this module is activated, it will intercept
 | |
|     "File Not Found" errors and look for a resource with a similar
 | |
|     filename. If one such file is found, mod_speling will send an
 | |
|     HTTP redirect to the client informing it of the correct
 | |
|     location. If several "close" files are found, a list of
 | |
|     available alternatives will be presented to the client.</p>
 | |
| 
 | |
|     <p>An especially useful feature of mod_speling, is that it will
 | |
|     compare filenames without respect to case. This can help
 | |
|     systems where users are unaware of the case-sensitive nature of
 | |
|     URLs and the unix filesystem. But using mod_speling for
 | |
|     anything more than the occasional URL correction can place
 | |
|     additional load on the server, since each "incorrect" request
 | |
|     is followed by a URL redirection and a new request from the
 | |
|     client.</p>
 | |
| 
 | |
|     <p>If all attempts to locate the content fail, Apache returns
 | |
|     an error page with HTTP status code 404 (file not found). The
 | |
|     appearance of this page is controlled with the <a
 | |
|     href="mod/core.html#errordocument">ErrorDocument</a> directive
 | |
|     and can be customized in a flexible manner as discussed in the
 | |
|     <a href="custom-error.html">Custom error responses</a> and <a
 | |
|     href="misc/custom_errordocs.html">International Server Error
 | |
|     Responses</a> documents.</p>
 | |
|     <!--#include virtual="footer.html" -->
 | |
|   </body>
 | |
| </html>
 | |
| 
 |