欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Apache httpd.conf配置文件AllowOverride参数详解 Apache下的AllowOverride和.htaccess 有大用

apache里面有一个很好用的服务,伪静态技术,也就是URL Rewrite(URL重写),它配合利用正则表达式,可以将url进行修改,可以利用网站的seo,也可以使url变得更加整洁,很是方便。

这里面牵扯到几个配置很有趣。有时候,我们需要修改apache默认配置,但是,我们却不想对apache的http.conf进行太多的修改,所以我们使用.htaccess(分布式配置文件)来达到我们的目的。.htaccess提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。

不过,我们需要让apache来读取它,这里就需要修改apache下的http.conf了。

我们的apache都有自己项目的默认根目录,在DocumentRoot "D:/www"下面(这里以我的路径为例子) ,有一个叫<Directory>的东西,它里面有这样一段代码:AllowOverride None,如果我们把None改成All,那么我们的www目录下所有项目都能读取到.htaccess了。

一个单词就解决了我们的问题,固然方便,但是它的弊端也很多。例如每次访问项目时,apache都会对每一个.htaccess文件进行读取,处理速度大幅度降低;每一个项目都能进行apache的配置修改,安全性大大降低等。

AllowOverride 它只能在<Directory>中生效,一般从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override,AllowOverride指令按类别决定了.htaccess文件中那些指令才是有效的,当AllowOverride设置成None时,相应的配置目录下的.htaccess文件是不被读取的,即无法生效。当AllowOverride设置成All时所以具有.htaccess的作用于的指令都会生效,意味着原apache指令会被.htaccess文件中的指令重写

 

因此有时候我们只需要添加一个<Directory>,路径指到个人项目就行了。例如:

<Directory "D:/www/my_app">

Options Indexes FollowSymLinks    #显示当前文件夹下的所有文件

  AllowOverride All #允许重写apache默认配置

</Directory>

虽然如此,一般都尽可能避免使用.htaccess文件,任何希望放在.htaccess文件中的配置,都可放在主配置的<Directory>段中,而且高效

避免使用的原因主要有:

首先是性能。如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用(参见指令的生效)

其次是安全。这样会允许用户自己修改apache的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。但是,如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求,所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride设置的值,并引导他们参阅相应的说明,以免日后生出许多麻烦。

来自 
http://blog.csdn.net/u013927110/article/details/41414091


 

AllowOverride从字面上解释是允许覆盖的意思,即Apache允许另一配置文件覆盖现有配置文件。

我们通常利用Apache的rewrite模块对URL进行重写,rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。

从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override,即:

< Directory /> 
AllowOverride None 
< /Directory>


在 AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 “.htaccess” 作用域的指令都允许出现在 .htaccess 文件中。

而对于 URL rewrite 来说,至少需要把目录设置为:

< Directory /myblogroot/> 
AllowOverride FileInfo 
< /Directory>


以下是AllowOverride的详细参数:

AuthConfig

允许使用与认证授权相关的指令(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, 等)。

FileInfo

允许使用控制文档类型的指令(DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter, mod_mime中的 Add* 和 Remove* 指令等等)、控制文档元数据的指令(Header, RequestHeader, SetEnvIf, SetEnvIfNoCase, BrowserMatch, CookieExpires, CookieDomain, CookieStyle, CookieTracking, CookieName)、mod_rewrite中的指令(RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule)和mod_actions中的Action指令。

Indexes

允许使用控制目录索引的指令(AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, 等)。

Limit

允许使用控制主机访问的指令(Allow, Deny, Order)。

Options[=Option,...]

 

允许使用控制指定目录功能的指令(Options和XBitHack)。可以在等号后面附加一个逗号分隔的(无空格的)Options选项列表,用来控制允许Options指令使用哪些选项。

来自 http://www.upupw.net/server/n73.html

普通分类: