Apache目录保护及.htaccess 的制作.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
最新文章更多
推荐文章更多
热点文章更多相关文章更多
|



