apache .htaccess 禁止访问某目录方法
作者:萧过无痕 发布于:2011-12-11 2:11 Sunday 分类:建站资源
--------------------------------------------------
最简单方法,在所要禁止的目录中的.htaccess文件中添加一下两行代码。
order allow,deny
deny from all
(可以把all换成某一ip地址)
----
【.htaccess简介】
.htaccess文件,又叫分布式配置文件,它提供了针对每个目录改变配置的方法,可以在一个特定的文档目录中放置一个包含指令的文件,以达到控制此目录及其子目录的目的。通
常.htaccess文件的使用配置语法和主配置文件一样,但是做为用户,当然所能使用的命令是受到限制的。系统管理员可以通过配置apache的AllowOverride指令来配置决
定.htaccess文件中哪些指令有效。如果在文档的子目录中还设置了.htaccess文件的话,子目录中的指令将会覆盖掉上级目录或者主服务器配置文件中的指令。此应用尤其是ISP在
同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下特别有意义。
【.htaccess应用】
1、错误文档的定位
常见的客户端请求错误返回代码:
401 Authorization Required
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
常见的服务器错误返回代码:
500 Internal Server Error
我们可以利用.htaccess指定自己事先制作好的错误提示页面。例如:
ErrorDocument 404 /help/errors/notfound.html
ErrorDocument 500 /help/errors/internalerror.html
ErrorDocument 错误代码 /目录名/文件名.扩展名
当然如果提示的信息很少的话,我们直接使用html就行了,如:
ErrorDocument 404 "Sorry the page you access is not exist"
以上指令等同于
<Directory /路径>
ErrorDocument 404 "Sorry the page you access is not exist"
</Directory>
2、使用服务器认证
要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,使用
htpasswd -c d:/passwords wwq
输入用户密码即可生成.htpasswd的文本文档
在.htaccess文件中加入:
AuthType Basic
AuthName "Restricted Files"
AuthUserFile d:/passwords
Require user wwq
以上只允许用户wwq访问目录
允许多人访问则必须建立一个组文件以确定组中的用户,其格式很简单,可以用你喜欢的编辑器建立,例如:
admin: wwq
editer: lily baty
我将它保存为d:/下的groups文件
使用htpasswd d:/passwords lily(htpasswd d:/passwords groups)为编辑组添加两个用户
修改.htaccess:
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile d:/passwords
AuthGroupFile d:/groups
Require group admin editer
当然也可以使用Require valid-user指令允许密码文件中的所有用户使用正确的密码进行访问。
3、拒绝来自某个IP的访问
order allow,deny
deny from 205.252.46.165 #拒绝ip地址为205.252.46.165的访问
deny from 219.5.45. #拒绝ip地址段为219.5.45.1-255的访问
deny from cyberthugs.com moreidiots.com #拒绝域名为cyberthugs.com、moreidiots.com的访问
allow from all
如果想禁止所有访问,则可以使用deny from all指令实现。
如果只想指定域名的访问则使用如下指令:
Order deny,allow
Deny from all #必须有这句,否则不起作用
Allow from dev.example.com #只允许dev.example.com的访问
只允许本地访问
Order deny,allow
Deny from all
Allow from 127.0.0.1
4、保护.htaccess文档
如果在以前的老版本的apache中,直接用http://www.dd.com/www/.htaccess可能将站点的.htaccess文件获取,通过它可以得到包含了密码文件的路径。不过现在这个在apache2中
好像就是多余的了。不过我们还是可以在.htaccess文件中加入如下指令,这样就可以将.htaccess保护起来。
<Files .htaccess>
order allow,deny
deny from all
</Files>
5、url转向和ssi包含
有很多人都问我,我的站是租用别人的虚拟主机啊,怎么用那个url重写和ssi啊,是不是不能用啊,其实也不是不能用,用.htaccess就可以实现,当然前提是你的服务提供商允许
啦。
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
就可以使用服务器端包含啦
使用Redirect指令实现URL转向:
Redirect /旧目录/旧文档名 新文档的地址
或者整个目录的转向: Redirect 旧目录 新目录
例如:Redirect /www/ http://localhost/test/
6、防止盗链
RewriteEngine on
RewriteCond % !^$
RewriteCond % !^http://(www/.)?域名.com/.*$ [NC]
RewriteRule /.(gif|jpg)$ - [F]
或者用图片代替之
RewriteEngine on
RewriteCond % !^$
RewriteCond % !^http://(www/.)?域名.com/.*$ [NC]
RewriteRule /.(gif|jpg)$ http://www.域名.com/替代图片文件名 [R,L]
【使用.htaccess文件的不足】
1、性能
AllowOverride启用了使用.htaccess文件,则apache需要在每个目录中查找.htaccess文件。因此会导致性能下降。另外对每一个请求,都需要读取一次.htaccess文件,还有
apache必须在所有上级的目录中查找.htaccess文件以使有效的指令都起作用,比如如果客户端请求/www/htdocs/help中的页面。服务器必须查找
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/help/.htaccess
四个额外文件(即使这些文件都不存在,当然你可以仅仅允许根目录使用.htaccess文件),也就是说目录深度越深,则访问的额外文件越多,性能越低了。
2、安全
由于在/www/htdocs/help下面的.htaccess文件中放置指令与在主配置文件中<Directory /www/htdocs/help>中放置相同的指令是完全等效的,这样允许用户自己修改服务器配置,
可能就会导致某些不愿意发生的意想不到的修改,这样就会造成服务器安全问题。这样你就必须考虑是否设置AllowOverride None来完全禁用.htaccess文件。
--------------------------------------------------------------------------
一 开启Mod_rewrite模块
打开Apache2\conf\httpd.conf
搜索 LoadModule rewrite_module modules/mod_rewrite.so (Apache2是这个)
去掉前面的#
搜索AllowOverride None 替换为 AllowOverride All
有好几个找到和下面代码类似的那个
</IfModule>
#
# "D:\usr\local\Apache2\cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "D:\usr\local\Apache2\cgi-bin">
AllowOverride All
Options None
Order allow,deny
Allow from all
</Directory>
二 在Apache2\conf\httpd.conf 最后一行添加
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)-htm-(.*)$ $1.php?$2
</IfModule>
标签: .htaccess禁止访问某目录 apache禁止访问某目录 禁止访问目录
评论:
2011-12-11 16:34