`
wangminshe89
  • 浏览: 665228 次
文章分类
社区版块
存档分类
最新评论

Apache指南: .htaccess文件使用手册

 
阅读更多
FROM:http://blog.goalercn.com/blogview.asp?logID=232&cateID=2
因为在一个国外的空间的根文件夹下看到这个.htaccess,搞不懂是干什么的,在落伍论坛找到一篇文章,先转过来放着,以后再慢慢研究,嘿嘿..
Apache指南:.htaccess文件

.htaccess文件提供了针对目录改变配置的方法。

*.htaccess文件
*工作原理和使用方法
*使用.htaccess文件的场合
*指令的生效
*认证举例
*服务器端包含举例
*CGI举例
*疑难解答

top
.htaccess文件
相关模块相关指令

*core
*mod_auth
*mod_cgi
*mod_include
*mod_mime



*AccessFileName
*AllowOverride
*Options
*AddHandler
*SetHandler
*AuthType
*AuthName
*AuthUserFile
*AuthGroupFile
*Require

top
工作原理和使用方法

.htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。

说明:如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config,则可以在服务器配置文件中按以下方法配置:

AccessFileName.config

允许放在这些文件中的指令取决于AllowOverride指令,此指令按类别决定了.htaccess文件中哪些指令才是有效的。如果一个指令允许放在.htaccess文件中,则,在本手册的说明中,此指令会有一个覆盖段,其中说明了为使此指令生效而必须在AllowOverride指令中设置的值。

例如,本手册对AddDefaultCharset指令的说明表明了,此指令可以用于.htaccess文件(见Context一行),而Override一行是"FileInfo",那么为使.htaccess中的此指令有效,则至少要设置"AllowOverrideFileInfo"。
例子:
Context:serverconfig,virtualhost,directory,.htaccess
Override:FileInfo

如果不能确定一个特定的指令是否允许用于.htaccess文件,可以查阅手册中对指令的说明,看在Context(“上下文”)行中是否有".htaccess."。
top
使用.htaccess文件的场合

一般情况下,不应该使用.htaccess文件,除非你对主服务器配置文件没有存取权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,但并不是这样,把用户认证写在主服务器配置中是完全可行的,而且是一种很好的方法。

在内容提供者需要针对目录改变服务器的配置而对服务器系统没有root权限时,则应该使用.htaccess文件。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在一个机器上宿主多个用户站点,而又希望用户可以自己改变配置的情况下。

虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主服务器的<Directory>段中,而且更高效。

避免使用.htaccess文件有两个主要原因。

首先是性能。如果AllowOverride允许使用.htaccess文件,则,Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,允许使用.htaccess文件都会导致性能的下降。另外,每次请求一个页面时,都需要读取.htaccess文件。

还有,Apache必须在所有更高级的目录中查找.htaccess文件,使所有有效的指令都起作用(参见howdirectivesareapplied.),所以,如果有对/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:
/www/htdocs/example中.htaccess文件的内容

AddTypetext/example.exm
httpd.conf文件中的段

<Directory/www/htdocs/example>
AddTypetext/example.exm
</Directory>

但是,把这个配置放置在服务器配置文件中则更加高效,因为只需要在Apache启动时读取一次,而不是在有文件请求时每次都读取。

将AllowOverride设置为"none"可以完全禁止使用.htaccess文件。

AllowOverrideNone
top
指令的生效

.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是,很重要需要记住的是,其更高级的目录也可能会有.htaccess文件,而指令是按查找顺序依次生效,所以,一个特定目录下的.htaccess文件中的指令可能会覆盖其更高级目录中的.htaccess文件的指令,即,子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。

例如:

目录/www/htdocs/example1中的.htaccess文件有如下内容:

Options+ExecCGI

(注意:必须设置"AllowOverrideOptions"以允许在.htaccess文件中使用"Options"指令。)

在目录/www/htdocs/example1/example2中的.htaccess文件有如下内容:

OptionsIncludes

由于第二个.htaccess文件的存在,/www/htdocs/example1/example2中的CGI执行是不允许的,而只允许OptionsIncludes,它完全覆盖了之前的设置。
top
认证举例

如果你为了知道如何认证,直接从这里开始看,有很重要的一点需要注意,有一种常见的误解,认为实现密码认证必须要使用.htaccess文件,其实不是这样。把认证指令放在主服务器配置文件的<Directory>段中,是一个更好的方法,而.htaccess文件应该仅仅用于无权访问主服务器配置文件的时候。参见上述的使用.htaccess文件的场合。

有此声明在先,如果你仍然需要使用.htaccess文件,请看以下说明。

必须设置"AllowOverrideAuthConfig"以允许这些指令生效

.htaccess文件的内容:

AuthTypeBasic
AuthName"PasswordRequired"
AuthUserFile/www/passwords/password.file
AuthGroupFile/www/passwords/group.file
RequireGroupadmins

注意,必须设置AllowOverrideAuthConfig以允许这些指令生效

更详细的有关身份识别和认证的说明,请参见authenticationtutorial。
top
服务器端包含举例

.htaccess文件的另一个常见用途是允许一个特定目录的服务器端包含(ServerSideIncludes),可以在需要的目录中放置.htaccess文件,并如下配置:

Options+Includes
AddTypetext/htmlshtml
AddHandlerserver-parsedshtml

注意,必须同时设置AllowOverrideOptions和AllowOverrideFileInfo使这些指令生效。

更详细的有关服务器端包含的说明,请参见SSItutorial。
top
CGI举例

最后,可以通过.htaccess文件允许在特定目录中执行CGI程序,需按如下配置:

Options+ExecCGI
AddHandlercgi-scriptcgipl

另外,如下,可以使给定目录下所有文件被视为CGI程序:

Options+ExecCGI
SetHandlercgi-script

注意,必须设置AllowOverrideOptions使这些指令生效。

更详细的有关CGI编程和配置的说明,请参见CGItutorial。
top
疑难解答

如果在.htaccess文件中写入了配置指令但不起作用,可能有多种原因。

最常见的原因是,AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置AllowOverrideNone。有一个很好的测试方法,即,在.htaccess文件随便增加点没用的内容,如果服务器没有返回了一个错误消息,那么几乎可以断定设置了AllowOverrideNone。

在访问文档时,如果收到服务器的出错消息,应该检查Apache的出错日志,可以知道.htaccess文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误。


.htaccess文件使用手册

-.htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

-子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。

-.htaccess必须以ASCII模式上传,最好将其权限设置为644。

错误文档的定位

常用的客户端请求错误返回代码:
401AuthorizationRequired
403Forbidden
404NotFound
405MethodNotAllowed
408RequestTimedOut
411ContentLengthRequired
412PreconditionFailed
413RequestEntityTooLong
414RequestURITooLong
415UnsupportedMediaType
常见的服务器错误返回代码:
500InternalServerError

用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:

ErrorDocument404/errors/notfound.html
ErrorDocument500/errors/internalerror.html

一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:

ErrorDocument错误代码/目录名/文件名.扩展名

如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子:

ErrorDocument401"<bodybgcolor=#ffffff><h1>你没有权限访问该页面,请放弃!</h1></body>"

文档访问的密码保护

要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如:

zheng:y4E7Ep8e7EYV

这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。

有了授权用户文档,可以在.htaccess中加入如下指令了:

AuthUserFile.htpasswd的服务器目录
AuthGroupFile/dev/null(需要授权访问的目录)
AuthNameEnterPassword
AuthTypeBasic(授权类型)

requireuserwsabstract(允许访问的用户,如果希望表中所有用户都允许,可以使用requirevalid-user)

注,括号部分为学习时候自己添加的注释

拒绝来自某个IP的访问

如果我不想某个政府部门访问到我的站点的内容,那可以通过.htaccess中加入该部门的IP而将它们拒绝在外。

例如:


orderallow,deny
denyfrom210.10.56.32
denyfrom219.5.45.
allowfromall

第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.5.45.0~219.2.45.255

想要拒绝所有人?用denyfromall好了。不止用IP,也可以用域名来设定。

保护.htaccess文档

在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令:

<Files.htaccess>
orderallow,deny
denyfromall
</Files>

URL转向

我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址:

Redirect/旧目录/旧文档名新文档的地址

或者整个目录的转向:

Redirect旧目录新目录

改变缺省的首页文件

一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在pmwiki中是pmwiki.php。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名:

DirectoryIndex新的缺省文件名

也可以列出多个,顺序表明它们之间的优先级别,例如:

DirectoryIndexfilename.htmlindex.cgiindex.pldefault.htm

防止盗链

如果不喜欢别人在他们的网页上连接自己的图片、文档的话,也可以通过htaccess的指令来做到。

所需要的指令如下:

RewriteEngineon
RewriteCond%!^$
RewriteCond%!^http://(www/.)?mydomain.com/.*$[NC]
RewriteRule/.(gif|jpg)$-[F]

如果觉得让别人的页面开个天窗不好看,那可以用一张图片来代替:

RewriteEngineon
RewriteCond%!^$
RewriteCond%!^http://(www/.)?mydomain.com/.*$[NC]
RewriteRule/.(gif|jpg)$http://www.mydomain.com/替代图片文件名[R,L]


-.htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法,即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

-子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。

-.htaccess必须以ASCII模式上传,最好将其权限设置为644。

错误文档的定位

常用的客户端请求错误返回代码:
401AuthorizationRequired
403Forbidden
404NotFound
405MethodNotAllowed
408RequestTimedOut
411ContentLengthRequired
412PreconditionFailed
413RequestEntityTooLong
414RequestURITooLong
415UnsupportedMediaType
常见的服务器错误返回代码:
500InternalServerError

用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:

ErrorDocument404/errors/notfound.html
ErrorDocument500/errors/internalerror.html

一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:

ErrorDocument错误代码/目录名/文件名.扩展名

如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子:

ErrorDocument401"<bodybgcolor=#ffffff><h1>你没有权限访问该页面,请放弃!</h1></body>"

文档访问的密码保护

要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如:

zheng:y4E7Ep8e7EYV

这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。

有了授权用户文档,可以在.htaccess中加入如下指令了:

AuthUserFile.htpasswd的服务器目录
AuthGroupFile/dev/null(需要授权访问的目录)
AuthNameEnterPassword
AuthTypeBasic(授权类型)

requireuserwsabstract(允许访问的用户,如果希望表中所有用户都允许,可以使用requirevalid-user)

注,括号部分为学习时候自己添加的注释

拒绝来自某个IP的访问

如果我不想某个政府部门访问到我的站点的内容,那可以通过.htaccess中加入该部门的IP而将它们拒绝在外。

例如:


orderallow,deny
denyfrom210.10.56.32
denyfrom219.5.45.
allowfromall

第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.5.45.0~219.2.45.255

想要拒绝所有人?用denyfromall好了。不止用IP,也可以用域名来设定。

保护.htaccess文档

在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令:

<Files.htaccess>
orderallow,deny
denyfromall
</Files>

URL转向

我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址:

Redirect/旧目录/旧文档名新文档的地址

或者整个目录的转向:

Redirect旧目录新目录

改变缺省的首页文件

一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在pmwiki中是pmwiki.php。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名:

DirectoryIndex新的缺省文件名

也可以列出多个,顺序表明它们之间的优先级别,例如:

DirectoryIndexfilename.htmlindex.cgiindex.pldefault.htm

防止盗链

如果不喜欢别人在他们的网页上连接自己的图片、文档的话,也可以通过htaccess的指令来做到。

所需要的指令如下:

RewriteEngineon
RewriteCond%!^$
RewriteCond%!^http://(www/.)?mydomain.com/.*$[NC]
RewriteRule/.(gif|jpg)$-[F]

如果觉得让别人的页面开个天窗不好看,那可以用一张图片来代替:

RewriteEngineon
RewriteCond%!^$
RewriteCond%!^http://(www/.)?mydomain.com/.*$[NC]
RewriteRule/.(gif|jpg)$http://www.mydomain.com/替代图片文件名[R,L]

一.自定义404,401,等错误
1.
首先建立一个名为:.htaccess
写入以下内容
ErrorDocument401/err401.html
ErrorDocument402/err402.html
ErrorDocument403/err403.html
ErrorDocument404/err404.html

其中,401,402,403,404代表错误类型,
后面的err401.html代表其相对应的页面,

2.
分别建立名字为:
err401.html,err402.html.........
的文件,当出现对应的错误的时候,
就会指向对面的页面

3.
传到根目录下,
也就是public_html目录下
一切就OK了


二.去掉广告
建个文件名.htaccess的文件,文件内容如下:
LayoutIgnoreURI*.php
LayoutIgnoreURI*.cgi
LayoutIgnoreURI*.htm
LayoutIgnoreURI*.html

.htaccess上传至空间的Public_html目录下,即可去掉广告!

注意*.*这里..想去那种扩展名的文件,就写上那种文件的扩展名!
这个是最简单的方法,只要在根目录加这个文件,那么整个网站都不会有广告!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics