📄 htaccess.html
字号:
<p>例子:</p>
<p><code>/www/htdocs/example1</code>目录中的<code>.htaccess</code>文件有如下内容:</p>
<div class="example"><p><code>
Options +ExecCGI
</code></p></div>
<p>(注意:必须设置"<code>AllowOverride Options</code>"以允许在<code>.htaccess</code>中使用"<code class="directive"><a href="../mod/core.html#options">Options</a></code>"指令)</p>
<p><code>/www/htdocs/example1/example2</code>目录中的<code>.htaccess</code>文件有如下内容:</p>
<div class="example"><p><code>
Options Includes
</code></p></div>
<p>由于第二个<code>.htaccess</code>文件的存在,<code>/www/htdocs/example1/example2</code>中的CGI执行是不允许的,而只允许 <code>Options Includes</code> ,它完全覆盖了之前的设置。</p>
<h3><a name="merge" id="merge">将.htaccess合并到主配置文件中</a></h3>
<p>正如在<a href="../sections.html">配置段(容器)</a>中讨论的那样,<code>.htaccess</code>文件能够覆盖<code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>段中对相应目录的设置,但是也同样会被主配置文件中其它类型的配置段所覆盖。这个特性可以用来强制实施某些配置,甚至在<code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>已经许可的情况下。举个例子来说,为了强迫在<code>.htaccess</code>中禁止脚本执行但不限制其它的情况下,可以这样:</p>
<div class="example"><p><code>
<Directory /><br />
<span class="indent">
Allowoverride All<br />
</span>
</Directory><br />
<br />
<Location /><br />
<span class="indent">
Options +IncludesNoExec -ExecCGI<br />
</span>
</Location>
</code></p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="auth" id="auth">认证举例</a></h2>
<p>如果你只是为了知道如何认证,而直接从这里开始看的,有很重要的一点需要注意,有一种常见的误解,认为实现密码认证必须要使用<code>.htaccess</code>文件,其实是不正确的。把认证指令放在主配置文件的<code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>段中是一个更好的方法,而<code>.htaccess</code>文件应该仅仅用于无权访问主配置文件的时候。参见<a href="#when">上述</a>关于何时应该与何时不应该使用<code>.htaccess</code>文件的讨论。</p>
<p>有此声明在先,如果你仍然需要使用<code>.htaccess</code>文件,请继续看以下说明。</p>
<p><code>.htaccess</code>文件的内容:</p>
<div class="example"><p><code>
AuthType Basic<br />
AuthName "Password Required"<br />
AuthUserFile /www/passwords/password.file<br />
AuthGroupFile /www/passwords/group.file<br />
Require Group admins
</code></p></div>
<p>必须设置 <code>AllowOverride AuthConfig</code> 以允许这些指令生效。</p>
<p>更详细的说明,请参见<a href="auth.html">认证、授权、访问控制</a>。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="ssi" id="ssi">服务器端包含(SSI)举例</a></h2>
<p><code>.htaccess</code>文件的另一个常见用途是允许一个特定的目录使用服务器端包含(SSI),可以在需要的目录中放置<code>.htaccess</code>文件,并作如下配置:</p>
<div class="example"><p><code>
Options +Includes<br />
AddType text/html shtml<br />
AddHandler server-parsed shtml
</code></p></div>
<p>注意,必须同时设置 <code>AllowOverride Options</code> 和 <code>AllowOverride FileInfo</code> 以使这些指令生效。</p>
<p>更详细的有关服务器端包含的说明,请参见<a href="ssi.html">SSI指南</a>。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="cgi" id="cgi">CGI举例</a></h2>
<p>可以通过<code>.htaccess</code>文件允许在特定的目录中执行CGI程序,需要作如下配置:</p>
<div class="example"><p><code>
Options +ExecCGI<br />
AddHandler cgi-script cgi pl
</code></p></div>
<p>另外,如下配置可以使给定目录下的所有文件被视为CGI程序:</p>
<div class="example"><p><code>
Options +ExecCGI<br />
SetHandler cgi-script
</code></p></div>
<p>注意,必须同时设置 <code>AllowOverride Options</code> 和 <code>AllowOverride FileInfo</code> 以使这些指令生效。</p>
<p>更详细的有关CGI编程和配置的说明,请参见<a href="cgi.html">CGI指南</a>。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="troubleshoot" id="troubleshoot">疑难解答</a></h2>
<p>如果在<code>.htaccess</code>文件中的某些指令不起作用,可能有多种原因。</p>
<p>最常见的原因是<code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>指令没有被正确设置,必须确保没有对此文件区域设置 <code>AllowOverride None</code> 。有一个很好的测试方法,就是在<code>.htaccess</code>文件随便增加点无意义的垃圾内容,如果服务器没有返回了一个错误消息,那么几乎可以断定设置了 <code>AllowOverride None</code> 。</p>
<p>在访问文档时,如果收到服务器的出错消息,应该检查Apache的错误日志,可以知道<code>.htaccess</code>文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误。</p>
</div></div>
<div id="footer">
<p class="apache">本文允许自由使用、分发、转载,但必须保留译者署名;详见:<a href="../translator_announcement.html#announcement">译者声明</a>。</p>
<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></div>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -