📄 sections.html
字号:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="keywords" content="Apache, 中文, 手册, 中文版, 中文手册, 中文版手册, 参考手册, 中文参考手册, 金步国" />
<meta name="description" content="Apache 2.2 中文版参考手册" />
<meta name="author" content="金步国" />
<link href="./style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="./style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>配置段(容器) - Apache 2.2 中文版参考手册</title>
</head>
<body id="manual-page">
<div id="page-header"><p class="menu"><a href="./mod/index.html">模块索引</a> | <a href="./mod/directives.html">指令索引</a> | <a href="./faq/index.html">常见问题</a> | <a href="./glossary.html">词汇表</a> | <a href="./sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="./images/feather.gif" /></div>
<div class="up"><a href="./index.html"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>
<div id="path"><a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">文档</a> > <a href="./index.html">版本2.2</a></div>
<div id="translation-info"> <a href="./translator_announcement.html#thanks">致谢</a> | <a href="./translator_announcement.html#announcement">译者声明</a> | 本篇译者:<a href="mailto:csfrank@citiz.net">金步国</a> | 本篇译稿最后更新:2006年1月5日 | <a href="./translator_announcement.html#last_new">获取最新版本</a></div>
<div id="page-content"><div id="preamble"><h1>配置段(容器)</h1>
<p><a href="configuring.html">配置文件</a>中指令的作用范围可能是整个服务器,也可能是特定的目录、文件、主机、URL。本文阐述如何使用配置段(容器)以及<code>.htaccess</code>文件来改变配置指令的作用范围。</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="types" id="types">配置段(容器)的类型</a></h2>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA" class="related">
<tr><th>相关模块</th><th>相关指令</th></tr>
<tr><td><ul><li><code class="module"><a href="./mod/core.html">core</a></code></li><li><code class="module"><a href="./mod/mod_version.html">mod_version</a></code></li><li><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#directory"><Directory></a></code></li><li><code class="directive"><a href="./mod/core.html#directorymatch"><DirectoryMatch></a></code></li><li><code class="directive"><a href="./mod/core.html#files"><Files></a></code></li><li><code class="directive"><a href="./mod/core.html#filesmatch"><FilesMatch></a></code></li><li><code class="directive"><a href="./mod/core.html#ifdefine"><IfDefine></a></code></li><li><code class="directive"><a href="./mod/core.html#ifmodule"><IfModule></a></code></li><li><code class="directive"><a href="./mod/mod_version.html#ifversion"><IfVersion></a></code></li><li><code class="directive"><a href="./mod/core.html#location"><Location></a></code></li><li><code class="directive"><a href="./mod/core.html#locationmatch"><LocationMatch></a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxy"><Proxy></a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxymatch"><ProxyMatch></a></code></li><li><code class="directive"><a href="./mod/core.html#virtualhost"><VirtualHost></a></code></li></ul></td></tr>
</table>
<p>容器有两种基本类型。大多数容器是针对各个请求的,包含于其中的指令仅对与该容器匹配的请求起作用,而容器<code class="directive"><a href="./mod/core.html#ifdefine"><IfDefine></a></code>、<code class="directive"><a href="./mod/core.html#ifmodule"><IfModule></a></code>、<code class="directive"><a href="./mod/mod_version.html#ifversion"><IfVersion></a></code>仅在启动和重新启动中起作用,如果在启动时指定的条件成立,则其中的指令对所有的请求都有效,否则将被忽略。</p>
<p><code class="directive"><a href="./mod/core.html#ifdefine"><IfDefine></a></code>容器中的指令只有在<code class="program"><a href="./programs/httpd.html">httpd</a></code>命令行中设定了特定的参数后才有效。下例中,只有在服务器用 <code>httpd -DClosedForNow</code> 方式启动时,所有的请求才会被重定向到另一个站点:</p>
<div class="example"><p><code>
<IfDefine ClosedForNow><br />
Redirect / http://otherserver.example.com/<br />
</IfDefine>
</code></p></div>
<p><code class="directive"><a href="./mod/core.html#ifmodule"><IfModule></a></code>容器很相似,但是其中的指令只有当服务器启用特定的模块时才有效(或是被静态地编译进了服务器,或是被动态装载进了服务器),注意,配置文件中该模块的装载指令<code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>行必须在出现在此容器之前。这个容器应该仅用于你希望无论特定模块是否安装,配置文件都能正常运转的场合;而不应该用于容器中的指令在任何情况下都必须生效的场合,因为它会抑制类似模块没找到之类的有用出错信息。</p>
<p>下例中,<code class="directive"><a href="./mod/mod_mime_magic.html#mimemagicfiles">MimeMagicFiles</a></code>指令仅当<code class="module"><a href="./mod/mod_mime_magic.html">mod_mime_magic</a></code>模块启用时才有效。</p>
<div class="example"><p><code>
<IfModule mod_mime_magic.c><br />
MimeMagicFile conf/magic<br />
</IfModule>
</code></p></div>
<p><code class="directive"><a href="./mod/mod_version.html#ifversion"><IfVersion></a></code>指令与<code class="directive"><a href="./mod/core.html#ifdefine"><IfDefine></a></code>和<code class="directive"><a href="./mod/core.html#ifmodule"><IfModule></a></code>很相似,但是其中的指令只有当正在执行的服务器版本与指定的版本要求相符时才有效。这个模块被设计用于测试套件、以及在一个存在多个不同httpd版本的大型网络中需要分别针对不同版本使用不同配置的情况。</p>
<div class="example"><p><code>
<IfVersion >= 2.1><br />
<span class="indent">
# 仅在版本高于 2.1.0 的时候才生效<br />
</span>
</IfVersion>
</code></p></div>
<p><code class="directive"><a href="./mod/core.html#ifdefine"><IfDefine></a></code>、<code class="directive"><a href="./mod/core.html#ifmodule"><IfModule></a></code>、<code class="directive"><a href="./mod/mod_version.html#ifversion"><IfVersion></a></code>都可以在条件前加一个"!"以实现条件的否定,而且都可以嵌套以实现更复杂的配置。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="file-and-web" id="file-and-web">文件系统和网络空间</a></h2>
<p>最常用的配置段是针对文件系统和网络空间特定位置的配置段。首先必须理解文件系统和网络空间这两个概念的区别,文件系统是指操作系统所看见的磁盘视图,比如,在Unix文件系统中,Apache会被默认安装到<code>/usr/local/apache2</code> ,在Windows文件系统中,Apache会被默认安装到<code>"C:/Program Files/Apache Group/Apache2"</code>(注意:Apache始终用正斜杠而不是反斜杠作为路径的分隔符,即使是在Windows中)。相反,网络空间是网站被web服务器发送以及被客户在浏览器中所看到的视图。所以网络空间中的路径<code>/dir/</code> 在Apache采用默认安装路径的情况下对应于Unix文件系统中的路径<code>/usr/local/apache2/htdocs/dir/</code> 。由于网页可以从数据库或其他地方动态生成,因此,网络空间无须直接映射到文件系统。</p>
<h3><a name="filesystem" id="filesystem">文件系统容器</a></h3>
<p><code class="directive"><a href="./mod/core.html#directory"><Directory></a></code>和<code class="directive"><a href="./mod/core.html#files"><Files></a></code>指令与其相应的<a class="glossarylink" href="./glossary.html#regex" title="see glossary">正则表达式</a>版本(<code class="directive"><a href="./mod/core.html#directorymatch"><DirectoryMatch></a></code>和<code class="directive"><a href="./mod/core.html#filesmatch"><FilesMatch></a></code>)一起作用于文件系统的特定部分。<code class="directive"><a href="./mod/core.html#directory"><Directory></a></code>配置段中的指令作用于指定的文件系统目录及其所有子目录,<a href="howto/htaccess.html">.htaccess文件</a>可以达到同样的效果。下例中,<code>/var/web/dir1</code> 及其所有子目录被允许进行目录索引。</p>
<div class="example"><p><code>
<Directory /var/web/dir1><br />
Options +Indexes<br />
</Directory>
</code></p></div>
<p><code class="directive"><a href="./mod/core.html#files"><Files></a></code>配置段中的指令作用于特定的文件名,而无论这个文件实际存在于哪个目录。下例中的配置指令如果出现在配置文件的主服务器段,则会拒绝对位于任何目录下的<code>private.html</code>的访问。</p>
<div class="example"><p><code>
<Files private.html><br />
Order allow,deny<br />
Deny from all<br />
</Files>
</code></p></div>
<p><code class="directive"><a href="./mod/core.html#files"><Files></a></code>和<code class="directive"><a href="./mod/core.html#directory"><Directory></a></code>段的组合可以作用于文件系统中的特定文件。下例中的配置会拒绝对 <code>/var/web/dir1/private.html</code> 、<code>/var/web/dir1/subdir2/private.html</code> 、<code>/var/web/dir1/subdir3/private.html</code>等任何 <code>/var/web/dir1/</code> 目录下<code>private.html</code>的访问。</p>
<div class="example"><p><code>
<Directory /var/web/dir1><br />
<Files private.html><br />
Order allow,deny<br />
Deny from all<br />
</Files><br />
</Directory>
</code></p></div>
<h3><a name="webspace" id="webspace">网络空间容器</a></h3>
<p><code class="directive"><a href="./mod/core.html#location"><Location></a></code>指令与其相应的<a class="glossarylink" href="./glossary.html#regex" title="see glossary">正则表达式</a>版本(<code class="directive"><a href="./mod/core.html#locationmatch"><LocationMatch></a></code>)一起作用于网络空间的特定部分。下例中的配置会拒绝对任何以"<code>/private</code>"开头的URL路径的访问,比如:<code>http://yoursite.example.com/private</code>、<code>http://yoursite.example.com/private123</code>、<code>http://yoursite.example.com/private/dir/file.html</code> 等所有以"<code>/private</code>"开头的URL路径。</p>
<div class="example"><p><code>
<Location /private><br />
Order Allow,Deny<br />
Deny from all<br />
</Location>
</code></p></div>
<p><code class="directive"><a href="./mod/core.html#location"><Location></a></code>指令与文件系统无关,下例演示了如何将特定的URL映射到Apache内部的处理器<code class="module"><a href="./mod/mod_status.html">mod_status</a></code> ,而并不要求文件系统中确实存在<code>server-status</code>文件。</p>
<div class="example"><p><code>
<Location /server-status><br />
SetHandler server-status<br />
</Location>
</code></p></div>
<h3><a name="wildcards" id="wildcards">通配符和正则表达式</a></h3>
<p><code class="directive"><a href="./mod/core.html#directory"><Directory></a></code>、<code class="directive"><a href="./mod/core.html#files"><Files></a></code>、<code class="directive"><a href="./mod/core.html#location"><Location></a></code>指令可以使用与C标准库中的<code>fnmatch</code>类似的shell风格的通配符。"*"匹配任何字符串,"?"匹配任何单个的字符,"[<em>seq</em>]"匹配<em>seq</em>序列中的任何字符,符号"/"不被任何通配符所匹配,所以必须显式地使用。</p>
<p>如果需要更复杂的匹配,这些容器都有一个对应的正则版本:<code class="directive"><a href="./mod/core.html#directorymatch"><DirectoryMatch></a></code>、<code class="directive"><a href="./mod/core.html#filesmatch"><FilesMatch></a></code>、<code class="directive"><a href="./mod/core.html#locationmatch"><LocationMatch></a></code> ,可以使用与Perl兼容的<a class="glossarylink" href="./glossary.html#regex" title="see glossary">正则表达式</a>,以提供更复杂的匹配。但是还必须注意下面<a href="#mergin">配置段的合并</a>部分关于使用正则表达式会如何作用于配置指令的内容。</p>
<p>下例使用非正则表达式的通配符来改变所有用户目录的配置:</p>
<div class="example"><p><code>
<Directory /home/*/public_html><br />
Options Indexes<br />
</Directory>
</code></p></div>
<p>下例使用正则表达式一次性拒绝对多种图形文件的访问:</p>
<div class="example"><p><code>
<FilesMatch \.(?i:gif|jpe?g|png)$><br />
Order allow,deny<br />
Deny from all<br />
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -