在整完apache和tomcat的之后我觉得有必要把<directory>和它下面的属性捋顺一下

如何访问根目录下的目录http://192.168.1.12/test/

第一.缺省apache不允许访问http目录(没有定义,就没有访 
问权限)


  1. 访问目录http://192.168.1.12/test/
  2. 会显示:
  3. Forbidden
  4. You don't have permission to access /test/ on this server.

第二.无限制目录访问 
在httpd.conf中增加定义,即可打开无限制的目录访问权限


  1. <Directory /home/macg/www/test>
  2. Options All
  3. AllowOverride all
  4. </Directory>

再访问会显示如下:


  1. Apache/2.0.54 (Fedora) Server at 192.168.1.12 Port 80
  2. Index of /test
  3. Name Last modified Size Description
  4. ------------------------------------------------------------
  5. Parent Directory -
  6. bg0073.jpg 29-Nov-2006 21:02 36K
  7. bg0135.jpg 29-Nov-2006 21:03 41K
  8. bg0137.jpg 29-Nov-2006 21:03 47K
  9. slade1.html 29-Nov-2006 22:02 1.2K
  10. slade2.html 29-Nov-2006 22:02 1.1K
  11. slade3.html 29-Nov-2006 22:02 1.4K
  12. slade4.html 29-Nov-2006 22:02 1.8K
  13. slade5.html 29-Nov-2006 22:02 2.3K
  14. -------------------------------------------------------------
  15. Apache/2.0.54 (Fedora) Server at 192.168.1.12 Port 80

实际AllowOverride all是enable .htaccess目录限制功能。

但test目录下并没有.htaccess文件

等于开放访问,无限制。

第三.有限制目录访问

将其他目录中的.htaccess拷贝入要限制访问的目录

  1. [root@localhost test]# ls -a
  2. . .. bg0073.jpg bg0135.jpg bg0137.jpg slade1.html
  3. slade2.html slade3.html slade4.html slade5.html
  4. [root@localhost test]# cp ../test1/.htaccess .
  5. [root@localhost test]# ls -a
  6. . .. bg0073.jpg bg0135.jpg bg0137.jpg .htaccess
  7. slade1.html slade2.html slade3.html slade4.html
  8. slade5.html
  9. [root@localhost test]# more .htaccess
  10. authType Basic
  11. AuthName "Restricted Files"
  12. AuthUserFile /etc/httpd/passwords
  13. Require valid-user

再访问http://192.168.1.12/test/ 
会跳出身份认证窗口,输入用户名密码,即可访问目录

.htaccess 目录限制的配置 
要使用.htaccess文件,先在将httpd.conf中建立<Directory > 
</Directory>


  1. <Directory "/home/macg/www/test">
  2. Options All
  3. 允许对目录的操作,ALL---所有操作
  4. AllowOverride all
  5. AllowOverride all----允许.htaccess所有指令,缺省是all
  6. AllowOverride None ----完全忽略.htaccess文件
  7. </Directory>

用/usr/bin/htpasswd创建一个用于认证的密码文件。 
并且这个文件不应该置于DocumentRoot目录下,以避免被下载。 
建议创建在/etc/httpd/目录下:


  1. [root@localhost httpd]# /usr/bin/htpasswd -c
  2. /etc/httpd/passwords macg
  3. -c建立文件
  4. New password:
  5. Re-type new password:
  6. Adding password for user macg
  7. [root@localhost httpd]# /usr/bin/htpasswd
  8. /etc/httpd/passwords gary
  9. 没有-c就是单纯的adduser 追加用户
  10. New password:
  11. Re-type new password:
  12. Adding password for user gary
  13. [root@localhost httpd]# more /etc/httpd/passwords
  14. macg:U8jCwSsZyAB2g
  15. gary:06yCDyg7AijlM

在受限制目录下建立.htaccess文件

  1. [root@localhost test]# ls -a
  2. . .. bg0073.jpg bg0135.jpg bg0137.jpg .htaccess
  3. slade1.html slade2.html slade3.html slade4.html
  4. slade5.html
  5. [root@localhost test]# more .htaccess
  6. authType Basic
  7. authType--------认证类型
  8. mod_auth_basic提供的Basic
  9. Basic认证方法并不加密来自用户浏览器的密码(明文传输) 更安全的认证方法"AuthType Digest",即由mod_auth_digest供的摘要认证
  10. 最新的浏览器版本才支持MD5认证
  11. (认证,服务器响应速度会受一些影响,一般有几百个用户就会对响应速度有非常明显的影响)
  12. AuthName "Restricted Files"
  13. AuthName "会员区"
  14. 此句是显示给用户看的
  15. AuthUserFile /etc/httpd/passwords
  16. 此目录接受passwords内定义用户的认证请求
  17. or
  18. Require macg
  19. 此目录只接受单一用户macg(unix用户)认证请求

<Directory ></Directory>中指令的含义

  1. <Directory "/home/macg/www/test">
  2. Options All
  3. AllowOverride all
  4. </Directory>
  5. Options指令-------目录的访问特性
  6. option none 禁止对目录的所有操作
  7. option all 允许对目录的所有操作,ALL---所有操作
  8. option ExecCGI 对该目录,可以执行cgi脚本
  9. option Indexes 允许访问该目录(而该目录没有index.html)时,返回目录下的文件列表
  10. option FollowSymLinks 只允许对目录的FollowSymLinks操作
  11. AllowOverride指令
  12. None 不读取.htaccess
  13. all all----允许.htaccess所有指令,缺省是all
  14. Limit .htaccess函盖具体限定的主机(allow,deny)
  15. AuthConfig .htaccess函盖跟认证有关指令(AuthType,AuthName)

<Directory ></Directory> 对下面的所有子目录也生效

所以httpd.conf中先对根目录/进行配置,等于是设置缺省配置

  1. httpd.conf中先对根目录/进行配置,等于是设置缺省配置
  2. <Directory />
  3. Options FollowSymLinks 禁止对目录的访问(option只允许对目录的FollowSymLinks操作)
  4. AllowOverride None 不读取.htaccess
  5. Order deny,allow deny all
  6. Deny from all
  7. </Directory>
  8. <Directory "/usr/local/apache2/htdocs">
  9. Options Indexes FollowSymLinks 只允许访问index和连接
  10. AllowOverride None
  11. Order allow,deny 承接父目录(/)的deny all,这里也是deny all
  12. Allow from all
  13. </Directory>

order allow deny ————-httpd.conf中封IP之类的操作


  1. Apache模块 mod_authz_host
  2. <Directory /docroot>
  3. Order Deny,Allow
  4. Deny from ...
  5. Allow from ...
  6. </Directory>
  7. 注意顺序:
  8. 除了后面allow的,其他都deny
  9. 典型的封IP
  10. Order Allow,Deny
  11. Allow from all
  12. Deny from 205.252.46.165
  13. 注意顺序:
  14. 除了后面deny的,其他都allow
  15. Deny from 192.168.2 典型的封网段

上面清楚了 可以设置一个例子

Apache对于多虚拟主机以及多虚拟路径的配置

  1. ServerName localhost
  2. <Directory />
  3. AllowOverride none
  4. Require all denied
  5. </Directory>
  6. DocumentRoot "/home/work/"
  7. ## 保证所有的项目都放在/home/work/目录, 该目录只做配置
  8. <Directory "/home/work/">
  9. Options None
  10. AllowOverride None
  11. Require all denied
  12. </Directory>

httpd-vhosts.conf 首先第一件事就是指定默认的DocumentRoot

  1. # 没有商量, 必须放在httpd.conf中申明的根路径
  2. # 不需要severName配置
  3. <VirtualHost 127.0.0.1:8800>
  4. DocumentRoot "/home/work/www/htdocs"
  5. <Directory /home/work/www/htdocs>
  6. AllowOverride none
  7. Require all granted
  8. </Directory>
  9. </VirtualHost>
  10. ##如果不需要多主机支持,到此为止

添加虚拟主机,虚拟目录等等

  1. ## 说明: local.baidu.com 为第一个主机名, 如果多个域名映射设置ServerAlias即可
  2. ## Alias 注意“/”的位置
  3. <VirtualHost local.baidu.com:8800>
  4. DocumentRoot "/home/work/workspace"
  5. ServerName local.baidu.com
  6. # ServerAlias local.baidu.com.cn local.baidu.cn
  7. <Directory /home/work/workspace>
  8. Options FollowSymLinks
  9. AllowOverride none
  10. Require all granted
  11. </Directory>
  12. Alias /phpMyAdmin "/home/work/www/htdocs/phpMyAdmin/"
  13. # 添加一个日志分析, rotatelogs需要自己安装
  14. LogFormat "{method:\"%m\",state:\"%s\",protocol:\"%H\",url:\"%U\",time:\"%{%Y-%m-%d %T}t\",ua:\"%{User-Agent}i\",query:\"%q\",refer:\"%{Referer}i\",server:\"%V\"}" seo
  15. CustomLog "|/usr/sbin/rotatelogs logs/seo_%Y%m%d.log 86400 480" seo
  16. </VirtualHost>
  17. ## 同上其他主机配置

当然对于该目录下个各种配置属性 不过下面这个是2.2的属性 在2.4中进行了少许的变更 所以2.4还是要查询文档 不过有下面的解释打底应该很容易

Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合 
Directory, Location, Files等),用来控制目录和文件的访问授权。 
所以,最常用的是: 
Order Deny,Allow 
Allow from All

注意“Deny,Allow”中间只有一个逗号,也只能有一个逗号,有空格都会出 
错;单词的大小写不限。上面设定的含义是先设定“先检查禁止设定,没有 
禁止的全部允许”,而第二句没有Deny,也就是没有禁止访问的设定,直 
接就是允许所有访问了。这个主要是用来确保或者覆盖上级目录的设置,开 
放所有内容的访问权。

按照上面的解释,下面的设定是无条件禁止访问:

  1. Order Allow,Deny
  2. Deny from All

如果要禁止部分内容的访问,其他的全部开放:

  1. Order Deny,Allow
  2. Deny from ip1 ip2
  3. 或者
  4. Order Allow,Deny
  5. Allow from all
  6. Deny from ip1 ip2

apache会按照order决定最后使用哪一条规则,比如上面的第二种方式,虽 
然第二句allow允许了访问,但由于在order中allow不是最后规则,因此还 
需要看有没有deny规则,于是到了第三句,符合ip1和ip2的访问就被禁止 
了。注意,order决定的“最后”规则非常重要,下面是两个错误的例子和 
改正方式:

  1. Order Deny,Allow
  2. Allow from all
  3. Deny from domain.org

错误:想禁止来自domain.org的访问,但是deny不是最后规则,apache在 
处理到第二句allow的时候就已经匹配成功,根本就不会去看第三句。 
解决方法:Order Allow,Deny,后面两句不动,即可。

  1. Order Allow,Deny
  2. Allow from ip1
  3. Deny from all

错误:想只允许来自ip1的访问,但是,虽然第二句中设定了allow规则,由 
于order中deny在后,所以会以第三句deny为准,而第三句的范围中又明显 
包含了ip1(all include ip1),所以所有的访问都被禁止了。 
解决方法一:直接去掉第三句。 
解决方法二:

  1. Order Deny,Allow
  2. Deny from all
  3. Allow from ip1

下面是测试过的例子:

  1. --------------------------------
  2. Order deny,allow
  3. allow from all
  4. deny from 219.204.253.8
  5. 全部都可以通行
  6. -------------------------------
  7. Order deny,allow
  8. deny from 219.204.253.8
  9. allow from all
  10. 全部都可以通行
  11. -------------------------------
  12. Order allow,deny
  13. deny from 219.204.253.8
  14. allow from all
  15. 只有219.204.253.8不能通行
  16. -------------------------------
  17. Order allow,deny
  18. allow from all
  19. deny from 219.204.253.8
  20. 只有219.204.253.8不能通行
  21. -------------------------------
  22. -------------------------------
  23. Order allow,deny
  24. deny from all
  25. allow from 219.204.253.8
  26. 全部都不能通行
  27. -------------------------------
  28. Order allow,deny
  29. allow from 219.204.253.8
  30. deny from all
  31. 全部都不能通行
  32. -------------------------------
  33. Order deny,allow
  34. allow from 219.204.253.8
  35. deny from all
  36. 只允许219.204.253.8通行
  37. -------------------------------
  38. Order deny,allow
  39. deny from all
  40. allow from 219.204.253.8
  41. 只允许219.204.253.8通行
  42. -------------------------------
  43. --------------------------------
  44. Order deny,allow
  45. 全部都可以通行(默认的)
  46. -------------------------------
  47. Order allow,deny
  48. 全部都不能通行(默认的)
  49. -------------------------------
  50. Order allow,deny
  51. deny from all
  52. 全部都不能通行
  53. -------------------------------
  54. Order deny,allow
  55. deny from all
  56. 全部都不能通行
  57. -------------------------------
  58. 对于上面两种情况,如果换成allow from all,则全部都可以通行!
  59. -------------------------------
  60. Order deny,allow
  61. deny from 219.204.253.8
  62. 只有219.204.253.8不能通行
  63. -------------------------------
  64. Order allow,deny
  65. deny from 219.204.253.8
  66. 全部都不能通行
  67. -------------------------------
  68. Order allow,deny
  69. allow from 219.204.253.8
  70. 只允许219.204.253.8通行
  71. -------------------------------
  72. Order deny,allow
  73. allow from 219.204.253.8
  74. 全部都可以通行
  75. -------------------------------
  76. -------------------------------
  77. order deny,allow
  78. allow from 218.20.253.2
  79. deny from 218.20
  80. 代表拒绝218.20开头的IP,但允许218.20.253.2通过;而其它非218.20开头的IP也都允许通过。
  81. -------------------------------
  82. order allow,deny
  83. allow from 218.20.253.2
  84. deny from 218.20

和上面的差不多,只是掉换的order语句中的allow、deny先后顺序,但最 
终结果表示全部都拒绝!

form:http://hi.baidu.com/enjoypain/blog/item/f48c7aecdba298d12f2e21ac.html 
前段时间做了个Apache的HTTP代理服务器,其中的order allow,deny这 
部分弄的不太懂,于是上网找资料看,谁知道越看越糊涂,其中有些难以分 
辨对错甚至是误导。就像破解windows系统密码的一些文章那样,很多都是 
人云亦云的,并没有经过测试。废话少说,先把我经过测试后分析总结出来 
的结论show出来,相信这对大家的理解非常有帮助。

  1.  

apache的<directory> 语句以及属性的含义的更多相关文章

  1. gradle-wrapper.properties中各属性的含义

    gradle-wrapper.properties中各属性的含义 1. gradle-wrapper.properties 每一个用gradle编译的工程,都会有一个gradle\wrapper目录. ...

  2. apache配置Directory目录权限的一些配置

    可以使用<Directory 目录路径>和</Directory>这对语句为主目录或虚拟目录设置权限,它们是一对容器语句,必须成对出现,它们之间封装的是具体 的设置目录权限语句 ...

  3. Meta标签中的属性及含义

    一.Meta标签中的format-detection属性及含义 format-detection翻译成中文的意思是“格式检测”,顾名思义,它是用来检测html里的一些格式的,那关于meta的forma ...

  4. 关于Meta标签中format-detection属性及含义

    一.Meta标签中的format-detection属性及含义 意为:格式检测 或许你会有这样的经历:当你在制作手机端的页面中,点击了没有加任何链接的格式的数字时,这时手机会进行自动拔号提示操作! 禁 ...

  5. android:ellipsize属性的含义

    android:ellipsize属性的含义http://blog.csdn.net/uyu2yiyi/article/details/6316310 跑马灯效果:http://www.liu-may ...

  6. C#中datagridviewz中SelectionMode的四个属性的含义

    C#中datagridviewz中SelectionMode的四个属性的含义 DataGridViewSelectionMode.ColumnHeaderSelect 单击列头就可以选择整列DataG ...

  7. Permission Denial: opening provider 隐藏的android:exported属性的含义

    Permission Denial: opening provider 隐藏的android:exported属性的含义 2013-03-07 13:17 227人阅读 评论(0) 收藏 举报 场景: ...

  8. Meta标签中的format-detection属性及含义(转)

    一.Meta标签中的format-detection属性及含义 意为:格式检测 或许你会有这样的经历:当你在制作手机端的页面中,点击了没有加任何链接的格式的数字时,这时手机会进行自动拔号提示操作! 禁 ...

  9. Java NIO Buffer中各种状态属性的含义

    关于NIO Buffer中的3个重要状态属性的含义: postion, limit与capacity. public class NioTest { public static void main(S ...

随机推荐

  1. 使用wsHttpBinding构建Message安全模式和UserName授权

    http://www.cnblogs.com/artech/archive/2011/05/22/authentication_01.html https://www.cnblogs.com/Fran ...

  2. python group()--转载

    import re a = "123abc456" print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) ...

  3. 常见dos命令汇总

    常用的内部命令有md.cd.rd.dir.path.copy.type.edit.ren.del.cls.ver.date.time.prompt.常用的外部命令有deltree.format.dis ...

  4. Mutex, semaphore, spinlock

    Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把钥匙交给队列的第一个.一般的用法是用于串行化对critical section代码的访问,保证这段代码不会被并行的运行. Semaphor ...

  5. Qt5.3.2openglVS2010_QSqlField_字段类型

    1.本来想通过 QSqlField::typeID() 来找字段类型,但是没找到... 然而看到了 SQL_INTEGER.SQL_SMALLINT等的使用(在“static QVariant::Ty ...

  6. F4+2 团队项目软件设计方案

    目录 1引言 1.1编写目的 1.2背景 1.3定义 1.4参考资料 2总体设计 2.1需求规定 2.2运行环境 2.3基本设计概念和处理流程 2.4功能描述 2.5功能器求与程序的关系 2.6人工处 ...

  7. 【Golang】幽灵变量(变量覆盖)问题的一劳永逸解决方法

    背景 在我们公司,测试定位问题的能力在考核中占了一定的比例,所以我们定位问题的主动性会比较高.因为很多开发同学都是刚开始使用golang,所以bug频出,其中又以短变量声明语法导致的错误最多.所以就专 ...

  8. Knight Probability in Chessboard

    2018-07-14 09:57:59 问题描述: 问题求解: 本题本质上是个挺模板的题目.本质是一个求最后每个落点的数目,用总的数目来除有所可能生成的可能性.这种计数的问题可以使用动态规划来进行解决 ...

  9. Python 网络编程和Socket

    2017-07-24 20:43:49 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求.Http协议主要的操作流程是req ...

  10. 表达谱(DGE)测序与转录组测序的差别

    DGE-seq和普通的transcriptomic profiling相比较有什么不同,有什么特点? DGE就是用酶将mRNA切断,只使用靠近poly A的一小段RNA去测序. #1 由于不是测定mR ...