当前位置:开发频道首页 >> Web开发 >> Apache专栏 >>

Apache目录保护及.htaccess 的制作

2007-03-05 17:24:28  作者:yangjc  来源:互连网  浏览次数:265  文字大小:【+】【-

七彩谷商城

.htaccess 檔是 acache http 服务器上的一个设定档。

一般来说,管理人员都会开放部份功能给你自行设定,也有的会完全关闭对.htaccess的支援。

设定网页密码;

设定发生错误时出现的文件;

改变首页的档案(index.html);

禁止读取档案;

重新导向文件;

加上 MIME 类别;

防止列出目绿内的档案..等等

其实还有很多功能,不过一般只会开放一般功能给你用 (除非你是管理员...),而我也不识那么多。所以我只说一般会用到的功能。

 

【.htaccess 简介】

.htaccess 是一个文字文件,你可以做任何好像 notepad 的文字编辑器去写一个。

或者你会对.htaccess这个名字有点困惑,其实.htaccess是一个完全的文件名,不是 filaname.htaccess 或者甚么的(当然也有管理员故意把它设定成其它名字,但一般都是用.htaccess的)。为何是 .htaccess?因为所有以 "." 开头的文件名在 *nix 系统中也是有属性隐藏的,平常列出数据夹时不会出现,所以保安会好一点。你可能会问:『MS Windows 要我一定给它一个名字,如何把它存档成为 .htaccess?』 其实方法有两个。第一个是到 ms-dos 的窗口中,按 ren filename.xxx.htaccess就可以了;第二个是在上传到服务器时才改名做 .htaccess。

而 .htaccss 内设定的格式是一行一个指令,如果你的 notepad 设定了自动换行的话,请关上它,这样会比较安全。

一点要注意,.htaccess是 apache 的产物,不是 IIS 的。IIS 服务器不支持它,也就是说你不能以简单地上传一个 ASCII 档去设定在 IIS 服务器上的 http 服务。

在上载.htaccess时,必需使用 ASCII 模式!你或许还要 chmod 它到 644(RW_R__R_)。

每一个放了.htaccess的目录和它的子目录都会被.htaccess影响。如果我在 /abc/ 放了一个 .htaccess,那么 /abc/ 和 /abc/def/ 内所有 file 都会被它影响,但 /index.html 不会被它影响 ←← 这一点是很重要的。

 

【密码保护】

这是最常见.htaccess被使用的功能之一,数据夹密码保护。

这种方法可以使没有授权的浏览者不能进入你所设定的限制区域,使用了 Javacript 设的密码太简单了,一下字就会被破解,而使用.htaccess系统就比使用 CGI 程序保护会员专页将更为有效,更安全。更重要的是使用.htaccess方式去设定不需要编写程序的技能。

首先,你要开启一般文字编辑工具,做出一个名叫 .htpasswd 的檔名(当然又可能是其它,但一般服务器都会设定 .htpasswd 是不能经由 http 读到的。档案中的的每一句代表一个使用者,使用者名称以及加密了的密码是以冒号(分隔。而密码必须经过加密才可以使用。加密的方法是一般密码使用了的 crypt,如果你不知如何加密,请到以下的网页。

UHome

http://www.euronet.nl/~arnow/htpasswd/

 

注: Win32 版本的 apache 好像不支持用了 crypt 加密法的密码文件,只支持 SHA1 和 MD5 的。如果你是使用 apahce for win32 版本,请使用 C:Program FilesApache GroupApachebinhtpasswd.exe 做出以 MD5 加密的密码文件!!

再在.htaccess中,加上以下句子

AuthName MemberPage

AuthType Basic

AuthUserFile /absolute/path/.htpasswd

require valid-user

AuthName 就是当 browser 得知要密码时所出现的句字,你可以自行改动 MemberPage;而第二句的 AuthType Basic 就千万不要去改;第三句的 AuthUserFile 就是设定所使用的 .htpasswd 檔,要留意它好像必需是在服务器上的绝对路径。请留意,这不是 URL 的位置、也不一定是在 ftp 中看到的位置、就算是由 CGI 自行测到的路径也未必准确,请细看服务器上的说明 (例如在 virtualave.net,URL 是 /.htpasswd ftp 看到的是 /public_html/.htpasswd,CGI 测到 /home/public_html/.htpasswd,但是事实上你要设定路径为 /data1/virtualave.net/USERNAME/public_html/.htpasswd)。

为了保安理由,不建议把 .htpasswd 放到可以用 http 去到的目录;

最后的 require 就是命令服务器谁可以进入,require valid-user 就是指只要是 .htpasswd 中的任何一人就可了;你也可以指定在名单上只有某人可以通过,require user username 或 require user username1 username2 username3;也可以指定是某组人才可以,require group groupname。

而设定组的方法是再做一个叫 .htgroup 的文字文件,内容如下:

groupname1: username1 username2 username3

groupname2: username1 username3 username4

再在.htaccess中加多一句 AuthGroupFile /absolute/path/.htgroup 和 .htpasswd 的方法一样,我不再说了。

 

以 ASCII 模式上传所有档案后,在那个数据夹中所有档案都会被保护。

而再进一步,我们更可以设定个别设定只有某个档案会密码,不同档案要不同的密码,但是我会晚一点才说。

【自设错误报告文件】

想做到好像 www.microsoft.com 一样, 找不到文件不只是几句白底黑字,也不是 IE 本身那个有 bug 的 "找不到网页",而是另一页 HTML 文件吗?

逢法很简单,首先写一页说找不到文件的 HTML,再用 notepad 打开您的 .htaccess。在最后加上一句

ErrorDocument 404 404.html

404.html 是错误档案路经,即所显示的档案;404 是错误码。以下就是一般会见到的错误码和所代表的错误原因。

401

Authorization failed 授权失败;即是错误 password

403

Access denied 存取违规;即是你不可以读取这个档案

404

File not found 找不到档案

500

Internal Server Error 服务器内部错误;可能是 http 服务器本身是问题,也可能是 CGI 出错

也有以下两类做法

ErrorDocument 404 "<html><body>找不到</body></html>"

ErrorDocument 500 http://www.xxx.com/xxx

Ps. 如果所用的错误文件是一个 CGI 档,就会有一点关于那个错误的资科放到环境变量内给 CGI 读取。

 

【自设首页档案】

这个可以算是最简单的一个设定了

DirectoryIndex index.html index.htm index.cgi

很简单,常你的网址是一个目录,没有注明文件名时 (如: http://www.xxx.com/) 它会显示 index.html。如果没有这个档案,就找下一个档案。如果没有任可一个名单上的档案,就会依设定列出目录内的文件名。

 

【禁止读取档案】

如果你的 CGI 会把秘密的内容(如: 密码)存到一个档案,那么别人只要知道这个档案的位置,就可以很简单的看到一切。不想这样吗?你可以完全不改变其它设定,不用把那个档案移到其它地方,只需在.htaccess加几句就可以。

<Files filename.ext>

order allow,deny

deny from all

</Files>

而 Apache 1.3 以后的版本,我们更可以用支持 regular expression 的 filesmatch

<filesmatch ".tmp">

order allow,deny

deny from all

</filesmatch>

其实 files 也可用 regular expression 的,但要加一个 ~ 在前(例: <files ~ ".xxx$">)。 files 和 filesmatch 的意思就是,内堻Q包着的几句只会对付合要求的部份档案生效。

接着我就说有关中间的文字→order deny, allow,就是先找出禁止(deny) 的,才去找例外许可的 (allow)。如果把它们反转,就是 order allow, deny 就是,就是先找出许可(allow) 的,才去找禁止的 (deny)。之后的 deny form all 就是说,全部 IP 来的都不可以。相对地 allow form all 也就是全部都可以。而你更可以这样做

order allow,deny

allow form all

deny form 123.456     #所有以 123.456 开始的 IP,如 123.456.1.1

 

除了设定 IP 外,您也可以设定 hostname(如: xxx.com)

Files 和 Filesmatch 的用途很多,你不但可以设定 deny,更可以设定 个别档案的密码,如

<files abc>

require user abc

</files>

<files def>

require user def

</files>

 

【重新导向文件】

就是重新导向文件。

Redirect /abc http://www.xxx.com/abcabc

Redirect permanent /def http://www.xxx.com/def

即是说,如果 browser 要求 http://_____/abc 它就会重新导向至 http://www.xxx.com/abcabc而第二句又有甚么不同呢?答案就是 http 的状能码不同,parmanet (301) 是永远的,代表 browser 下一次未必会再要求这档案,而直接找另一个。除了 permanent 之外,还有 temp ( 301;和不写一样)、seeother(303) 和 gone(410)。

也有 RedirectMatch,不过它就支援 regular expression。

 

【防止列出目绿内的档案】

其实要做到这个目标可以不用 .htaccess,你只要自己写一页 index.html 放入去就可以了。但是,用.htaccess会方便很多,在.htaccess中加一句。

Option -Indexes

这样做,服务器就不会多事地把目录内的文件名列出。如果你只不过是想不列出某几个档案,请用以下的设定

IndexIgnore *.gif *.jpg

我想就算只识一点英文的人也会明白,就是在列出档名时不理会(ignore) 后面的档案。

Ps. 如果设定了 IndexIgnore *,它就不会列出任何档案,但是会有 HEADER 和 README 的内容,而它们是可以自设的。

七彩谷商城
B20
 
B8

最新文章

更多

· Apache重写规则的常见应用
· 网站重定向实现
· 网站图像防盗-Apache配置...
· Apache2 httpd.conf 中文版
· 用apache实现禁止IP段或...
· Apache的Order Allow De...

推荐文章

更多

· Apache重写规则的常见应用
· 网站重定向实现
· 网站图像防盗-Apache配置...
· Apache2 httpd.conf 中文版
· 用apache实现禁止IP段或...
· Apache的Order Allow De...

热点文章

更多

相关文章

更多

· 基于Video4Linux 的USB摄像头图像采集实现
· 利用Video4Linux获取摄像头数据
· 在你的Ubuntu Linux桌面上嵌入终端窗口
· 自动挂载Windows文件系统分区的常用方法
· 嵌入式Linux系统中I/O端口需要注意的问题
B11