.htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以做用于此目录及其全部子目录。做为用户,所能使用的命令受到限制。管理员能够经过Apache的AllowOverride指令来设置。html
1简介
概述来讲,htaccess文件是
Apache服务器中的一个配置文件,它负责相关目录下的网页配置。经过htaccess文件,能够帮咱们实现:网页
301重定向、自定义404错误页面、改变文件扩展名、容许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
Unix、Linux系统或者是任何版本的Apache Web服务器都是支持.htaccess的,可是有的
主机服务商可能不容许你自定义本身的.htaccess文件。
启用.htaccess,须要修改httpd.conf,启用AllowOverride,并能够用 AllowOverride限制特定命令的使用。若是须要使用.htaccess之外的其余文件名,能够用AccessFileName指令来改变。例 如,须要使用.config ,则能够在服务器配置文件中按如下方法配置:AccessFileName .config 。
笼统地说,.htaccess能够帮咱们实现包括:文件夹密码保护、用户自动
重定向、自定义错误页面、改变你的
文件扩展名、封禁特定IP地址的用户、只容许特定IP地址的用户、禁止目录列表,以及使用其余文件做为index文件等一些功能。
2工做
.htaccess文件(或者"分布式配置文件")提供了针对每一个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令做用于此目录及其全部子目录。
说明
若是须要使用.htaccess之外的其余文件名,能够用AccessFileName指令来改变。例如,须要使用.config ,则能够在服务器配置文件中按如下方法配置:
AccessFileName .config
一般,.htaccess文件使用的配置语法和主配置文件同样。AllowOverride指令按类别决定 了.htaccess文件中哪些指令才是有效的。若是一个指令容许在.htaccess中使用,那么在本手册的说明中,此指令会有一个覆盖项段,其中说明 了为使此指令生效而必须在AllowOverride指令中设置的值。
例如,本手册对AddDefaultCharset指令的阐述代表此指令能够用于.htaccess文件中(见"做 用域"项),而覆盖项一行是FileInfo ,那么为了使.htaccess中的此指令有效,则至少要设置 AllowOverride FileInfo 。
例子
做用域
|
server config, virtual host, directory, .htaccess
|
覆盖项
|
FileInfo
|
若是不能肯定某个指令是否能够用于.htaccess文件,能够查阅手册中对指令的说明,看在"做用域"行中是否有".htaccess" 。
(不)使用
通常状况下,不该该使用.htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为
用户认证只能经过.htaccess文件实现,其实并非这样,把用户认证写在主配置文件中是彻底可行的,并且是一种很好的方法。
.htaccess文件应该被用在内容提供者须要针对特定目录改变服务器的配置而又没有
root权限的状况下。若是服务器
管理员不肯意频繁修改配置,则能够容许用户经过.htaccess文件本身修改配置,尤为是ISP在同一个机器上运行了多个用户站点,而又但愿用户能够本身改变配置的状况下。
虽然如此,通常都应该尽量地避免使用.htaccess文件。任何但愿放在.htaccess文件中的配置,均可以放在主配置文件的<Directory>段中,并且更高效。
避免使用.htaccess文件有两个主要缘由。
首先是性能。若是AllowOverride启用了.htaccess文件,则Apache须要在每一个目录中查找.htaccess文件,所以,不管是否真正用到,启用.htaccess都会致使性能的降低。另外,对每个请求,都须要读取一次.htaccess文件。
还有,Apache必须在全部上级的目录中查找.htaccess文件,以使全部有效的指令都起做用(参见指令的生效),因此,若是请求/www/htdocs/example中的页面,Apache必须查找如下文件:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
总共要访问4个额外的文件,即便这些文件都不存在。(注意,这可能仅仅因为容许根目录"/"使用.htaccess ,虽然这种状况并很少。)
其次是安全。这样会容许用户本身修改服务器的配置,这可能会致使某些意想不到的修改,因此请认真考虑是否应当给予用 户这样的特权。可是,若是给予用户较少的特权而不能知足其须要,则会带来额外的技术支持请求,因此,必须明确地告诉用户已经给予他们的权限,说明 AllowOverride设置的值,并引导他们参阅相应的说明,以避免往后生出许多麻烦。
注意,在/www/htdocs/example目录下的.htaccess文件中放置指令,与在主配置文件中<Directory /www/htdocs/example>段中放置相同指令,是彻底等效的。
/www/htdocs/example目录下的.htaccess文件的内容:
AddType text/example .exm
-
conf文件中摘录的内容:
<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>
可是,把配置放在主配置文件中更加高效,由于只须要在Apache启动时读取一次,而不是在每次文件被请求时都读取。
将AllowOverride设置为none能够彻底禁止使用.htaccess文件:
AllowOverride None
指令范围
.htaccess 文件中的配置指令做用于.htaccess文件所在的目录及其全部子目录,可是很重要的、须要注意的是,其上级目录也可能会有.htaccess文件,而 指令是按查找顺序依次生效的,因此一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中 的指令会覆盖父目录或者主配置文件中的指令。
例子:
/www/htdocs/example1目录中的.htaccess文件有以下内容:
Options +ExecCGI
(注意:必须设置"AllowOverride Options"以容许在.htaccess中使用"Options"指令)
/www/htdocs/example1/example2目录中的.htaccess文件有以下内容:
Options Includes
因为第二个.htaccess文件的存在,/www/htdocs/example1/example2中的CGI执行是不容许的,而只容许 Options Includes ,它彻底覆盖了以前的设置。
将.htaccess合并到主配置文件中
正如在配置段(容器)中讨论的那样,.htaccess文件可以覆盖<Directory>段中对相应 目录的设置,可是也一样会被主配置文件中其它类型的配置段所覆盖。这个特性能够用来强制实施某些配置,甚至在AllowOverride已经许可的状况 下。举个例子来讲,为了强迫在.htaccess中禁止
脚本执行但不限制其它的状况下,能够这样:
<Directory />
Allowoverride All
</Directory>
<Location />
Options +IncludesNoExec -ExecCGI
</Location>
认证举例
如 果你只是为了知道如何认证,而直接从这里开始看的,有很重要的一点须要注意,有一种常见的误解,认为实现密码认证必需要使用.htaccess文件,其实 是不正确的。把认证指令放在主配置文件的<Directory>段中是一个更好的方法,而.htaccess文件应该仅仅用于无权访问主配置 文件的时候。参见上述关于什么时候应该与什么时候不该该使用.htaccess文件的讨论。
有此声明在先,若是你仍然须要使用.htaccess文件,请继续看如下说明。
.htaccess文件的内容:
AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins
必须设置 AllowOverride AuthConfig 以容许这些指令生效。
服务器端举例
.htaccess文件的另外一个常见用途是容许一个特定的目录使用服务器端包含(SSI),能够在须要的目录中放置.htaccess文件,并做以下配置:
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
注意,必须同时设置 AllowOverride Options 和 AllowOverride FileInfo 以使这些指令生效。
CGI举例
能够经过.htaccess文件容许在特定的目录中执行CGI程序,须要做以下配置:
Options +ExecCGI
AddHandler cgi-script cgi pl
另外,以下配置可使给定目录下的全部文件被视为CGI程序:
Options +ExecCGI
SetHandler cgi-script
注意,必须同时设置 AllowOverride Options 和 AllowOverride FileInfo 以使这些指令生效。
.htaccess工具
不会写的朋友,在这介绍一款很不错.htaccess的重定向—URL重写工具rewriting-tool
3疑难解答
若是在.htaccess文件中的某些指令不起做用,可能有多种缘由。
最多见的缘由是AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置 AllowOverride None 。有一个很好的测试方法,就是在.htaccess文件随便增长点无心义的垃圾内容,若是服务器没有返回了一个错误消息,那么几乎能够判定设置了 AllowOverride None 。
在访问文档时,若是收到服务器的出错消息,应该检查Apache的
错误日志,能够知道.htaccess文件中哪些指令是不容许使用的,也可能会发现须要纠正的语法错误。