A-A+

apache .htaccess 禁止访问某目录方法

2017年03月28日 站长资讯 暂无评论

【.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"

以上指令等同于

  1. <Directory /路径>  
  2. ErrorDocument 404 "Sorry the page you access is not exist"  
  3. </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保护起来。

  1. <Files .htaccess>  
  2. order allow,deny  
  3. deny from all  
  4. </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文件中放置指令与在主配置文件中中放置相同的指令是完全等效的,这样允许用户自己修改服务器配置,可能就会导致某些不愿意发生的意想不到的修改,这样就会造成服务器安全问题。这样你就必须考虑是否设置AllowOverride None来完全禁用.htaccess文件。

一 开启Mod_rewrite模块

打开Apache2\conf\httpd.conf

搜索 LoadModule rewrite_module modules/mod_rewrite.so (Apache2是这个)

去掉前面的#

搜索AllowOverride None 替换为 AllowOverride All

有好几个找到和下面代码类似的那个

  1. </IfModule>  
  2.   
  3. #  
  4. # "D:\usr\local\Apache2\cgi-bin" should be changed to whatever your ScriptAliased  
  5. # CGI directory exists, if you have that configured.  
  6. #  
  7. <Directory "D:\usr\local\Apache2\cgi-bin">  
  8. AllowOverride All  
  9. Options None  
  10. Order allow,deny  
  11. Allow from all  
  12. </Directory>  

二 在Apache2\conf\httpd.conf 最后一行添加

  1. <IfModule mod_rewrite.c>  
  2. RewriteEngine On  
  3. RewriteRule ^(.*)-htm-(.*)$ $1.php?$2  
  4. </IfModule>  
标签:

评论已关闭!