URL重定向之一.htaccess文件和AllowOverride指令

一般利用Apache的rewrite模块对URL进行重写的时候,rewrite规则会写在 .htaccess文件里。可是要使Apache可以正常读取 .htaccess文件的内容,就必须对 .htaccess所在的目录进行配置。
 
首先来认识一下.htaccess文件,概述来讲,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。经过htaccess文件,能够帮咱们实现:网页301重定向、自定义404错误页面、改变文件扩展名、容许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
 

.htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,当.htaccess中的指令生效时,它将重写原来Apache中默认的指令,但只做用于.htaccess文件所在的目录及其全部子目录。做为用户,所能使用的命令受到限制。管理员能够经过Apache的AllowOverride指令来设置。正则表达式

 
首先咱们来详细认识一下Apache的AllowOverride指令:
当服务器发现一个.htaccess文件(由AccessFileName指定)时,它须要知道在这个文件中声明的是哪些指令能覆盖在此以前指定的配置指令。
AllowOverride指令仅容许存在于<Directory>配置段
AllowOverride仅在不包含正则表达式的<Directory>配置段中才是有效的。在<Location>, <DirectoryMatch>, <Files>配置段中都是无效的。
通常从安全性考虑,更目录的AllowOverride属性通常都配置成不容许任何Override,即原文配置是这么写的:
<Directory />
AllowOverride  None
</Directory>
AllowOverride指令按类别决定了.htaccess文件中哪些指令才是有效的。 当AllowOverride设置成None时,相应的配置目录下的 .htaccess 文件是不被读取,被彻底忽略的,此时 .htaccess文件也就彻底不生效。 当AllowOverride设置成 All 时,全部具备“.htaccess”做用域的指令都会生效,意味着原来Apache中的指令都将会按 .htaccess文件中的指令重写。
对于URL rewrite 来讲,至少吧他对应的权限开启,也就是开启 FileInfo :即:
<Directory /www/>
AllowOverride  FileInfo
</Directory>
对于AllowOverride,还能够对它指定以下一些能被重写的指令类型.
   1 AuthConfig 容许使用全部的权限指令,他们包括 AuthDBMGroupFile AuthDBMUserFile AuthGroupFile AuthName AuthTypeAuthUserFile 和 Require 
 2 FileInfo 容许使用文件控制类型的指令。它们包括 AddEncoding AddLanguage AddType DEfaultType ErrorDocument LanguagePriority 
 3 Indexes 允 许使用目录控制类型的指令。它们包 括 AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon DirectoryIndex FancyIndexing HeaderName IndexIgnore IndexOptions ReadmeName 
 4 Limit 容许使用权限控制指令。它们包括Allow Deny和Order 
 5 Options 容许使用控制目录特征的指令.他们包括Options 和XBitHack 
 Options: 
Options指令通常都写在AllowOverride指令的上面:以下形式:
<Directory "D:/AppServ/Apache2.2/icons">
      Options Indexes MultiViews
     AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
Options指令以下:
1 All 准许如下除MultiViews之外全部功能 
2 MultiViews 容许多重内容被浏览,若是你的目录下有一个叫作foo.txt的文件,那么你能够经过/foo来访问到它,这对于一个多语言内容的站点比较有用 
3 Indexes 若该目录下无index文件,则准许显示该目录下的文件以供选择,禁止目录浏览能够删这项或“-Indexes”。
4 IncludesNOEXEC 准许SSI,但不可以使用#exec和#include功能 
5 Includes 准许SSI 
   6 FollowSymLinks 在该目录中,服务器将跟踪符号连接。注意,即便服务器跟踪符号连接,它也不会改变用来匹配不一样区域的路径名,若是在<Local>标记内设置,该选项会被忽略 
7 SymLinksIfOwnerMatch 在该目录中仅仅跟踪本站点内的连接 
8 ExecCGI 在该目录下准许使用CGI
其实使用注意事项及使用.htaccess文件的优缺点请参考百度百科里的.htaccess  http://baike.baidu.com/view/91163.htm 
 
若是在.htaccess文件中的某些指令不起做用,可能有多种缘由。   最多见的缘由是AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置 AllowOverride None 。有一个很好的测试方法,就是在.htaccess文件随便增长点无心义的垃圾内容,若是服务器没有返回了一个错误消息,那么几乎能够判定设置了 AllowOverride None 。   在访问文档时,若是收到服务器的出错消息,应该检查Apache的错误日志,能够知道.htaccess文件中哪些指令是不容许使用的,也可能会发现须要纠正的语法错误。
相关文章
相关标签/搜索