`
kong1616
  • 浏览: 101712 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

htaccess的作用和设置

阅读更多
htaccess是什么

.htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。



  - 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。



  - .htaccess必须以ASCII模式上传,最好将其权限设置为644。



  Unix、Linux系统或者是任何版本的Apache Web服务器都是支持.htaccess的,但是有的主机服务商可能不允许你自定义自己的.htaccess文件。国内的大多数虚拟主机就没有这个功能。我所知道的提供这个功能的有康盛世纪(就是Discuz的论坛服务商)。



  启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。



  笼统地说,.htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。


htaccess 工作原理和使用方法

htaccess文件(或者"分布式配置文件")提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。



  
说明:


  如果需要使用.htaccess以外的其他文件名,可以用 AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:



  AccessFileName .config



  通常,.htaccess文件使用的配置语法和主配置文件一样。AllowOverride指令按类别决定了.htaccess文件中哪些指令才是有效的。如果一个指令允许在.htaccess中使用,那么在本手册的说明中,此指令会有一个覆盖项段,其中说明了为使此指令生效而必须在AllowOverride指令中设置的值。



  例如,本手册对AddDefaultCharset指令的阐述表明此指令可以用于.htaccess文件中(见"作用域"项),而覆盖项一行是 FileInfo ,那么为了使.htaccess中的此指令有效,则至少要设置 AllowOverride FileInfo 。



  
例子:


  
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
如果不能确定某个指令是否可以用于.htaccess文件,可以查阅手册中对指令的说明,看在"作用域"行中是否有".htaccess" 。



(不) 使用.htaccess文件的场合

一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。



  .htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有 root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。



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



  避免使用.htaccess文件有两个主要原因。



  首先是性能。如果 AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。



  还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用(参见指令的生效),所以,如果请求/www/htdocs/example中的页面,Apache必须查找以下文件:



  /.htaccess




  /www/.htaccess



  /www/htdocs/.htaccess



   /www/htdocs/example/.htaccess


  总共要访问4个额外的文件,即使这些文件都不存在。(注意,这可能仅仅由于允许根目录"/"使用.htaccess ,虽然这种情况并不多。)



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



  注意,在/www/htdocs/example目录下的.htaccess文件中放置指令,与在主配置文件中<Directory /www/htdocs/example>段中放置相同指令,是完全等效的。



  /www/htdocs/example目录下的.htaccess文件的内容:



  AddType text/example .exm



  httpd.conf文件中摘录的内容:



  <Directory /www/htdocs/example>



  AddType text/example .exm



  </Directory>



  但是,把配置放在主配置文件中更加高效,因为只需要在Apache启动时读取一次,而不是在每次文件被请求时都读取。



  将AllowOverride设置为none 可以完全禁止使用.htaccess文件:



  AllowOverride None

htaccess指令的生效

 .htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。



  例子:



  /www/htdocs/example1目录中的.htaccess文件有如下内容:



  Options +ExecCGI



  (注意:必须设置"AllowOverride Options"以允许在.htaccess中使用"Options"指令)



  /www/htdocs/example1/example2目录中的.htaccess文件有如下内容:



  Options Includes



  由于第二个.htaccess文件的存在,/www/htdocs/example1/example2中的CGI执行是不允许的,而只允许 Options Includes ,它完全覆盖了之前的设置。



  将.htaccess合并到主配置文件中



  正如在配置段(容器)中讨论的那样,.htaccess文件能够覆盖<Directory>段中对相应目录的设置,但是也同样会被主配置文件中其它类型的配置段所覆盖。这个特性可以用来强制实施某些配置,甚至在AllowOverride已经许可的情况下。举个例子来说,为了强迫在.htaccess中禁止脚本执行但不限制其它的情况下,可以这样:



  <Directory />



  Allowoverride All



  </Directory>



  <Location />



  Options +IncludesNoExec -ExecCGI



  </Location>



  
认证举例


  如果你只是为了知道如何认证,而直接从这里开始看的,有很重要的一点需要注意,有一种常见的误解,认为实现密码认证必须要使用.htaccess文件,其实是不正确的。把认证指令放在主配置文件的<Directory>段中是一个更好的方法,而.htaccess文件应该仅仅用于无权访问主配置文件的时候。参见上述关于何时应该与何时不应该使用.htaccess文件的讨论。



  有此声明在先,如果你仍然需要使用.htaccess文件,请继续看以下说明。



  .htaccess文件的内容:



  AuthType Basic



  AuthName "Password Required"



  AuthUserFile /www/passwords/password.file



  AuthGroupFile /www/passwords/group.file



  Require Group admins



  必须设置 AllowOverride AuthConfig 以允许这些指令生效。



  
服务器端包含(SSI)举例


  .htaccess文件的另一个常见用途是允许一个特定的目录使用服务器端包含(SSI),可以在需要的目录中放置.htaccess文件,并作如下配置:



  Options +Includes



  AddType text/html shtml



  AddHandler server-parsed shtml



  注意,必须同时设置 AllowOverride Options 和 AllowOverride FileInfo 以使这些指令生效。



  
CGI举例


  可以通过.htaccess文件允许在特定的目录中执行 CGI程序,需要作如下配置:



  Options +ExecCGI



  AddHandler cgi-script cgi pl



  另外,如下配置可以使给定目录下的所有文件被视为CGI程序:



  Options +ExecCGI



  SetHandler cgi-script



  注意,必须同时设置 AllowOverride Options 和 AllowOverride FileInfo 以使这些指令生效。 如果在.htaccess文件中的某些指令不起作用,可能有多种原因。



  最常见的原因是AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置 AllowOverride None 。有一个很好的测试方法,就是在.htaccess文件随便增加点无意义的垃圾内容,如果服务器没有返回了一个错误消息,那么几乎可以断定设置了 AllowOverride None 。



  在访问文档时,如果收到服务器的出错消息,应该检查Apache的错误日志,可以知道.htaccess文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误
分享到:
评论

相关推荐

    CentOS下.htaccess不起作用的解决方法

    悲剧,看来Apache的Rewrite部分有问题了,完全无视掉了.htaccess文件!经过检查Apache的模块,发现Rewrite模块是开启的状态,看来是httpd.conf文件中的配置有点问题了。回想起之前在Ubuntu Server下配置Rewrite也是...

    fix-drupal-htaccess-rewritebase:修复适合我的设置的.htaccess文件

    fix-drupal-htaccess-rewritebase 修复适合我的设置的.htaccess文件安装npm i -g fix-drupal-htaccess-rewritebase 用法$ fix-drupal-htaccess-rewritebase 它有什么作用? 通常这是: diff --git a/drupal/....

    Apache服务器中.htaccess的基本配置总结

    .htaccess文件(或者”分布式配置文件”提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员...

    apache下.htaccess的功能及写法

    – .htaccess 文件(或者”分布式配置文件”提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理...

    Apache2.4.x版wampserver本地php服务器如何让外网访问及启用.htaccess

    Apache 从2.2升级到 ....htaccess 如果不起作用将 LoadModule rewrite_module modules/mod_rewrite.so 前面的注释(#)去掉就可以了。 下面看一下 Apache2.4 的变化:(官方英文说明) 所有的请求都被拒绝 2.2上的配

    httpd.ini文件下载

    实际上windows主机服务器上的虚拟主机可以用httpd.ini文件来充当.htaccess文件在Linux主机空间的作用,不过要令你失望的是,httpd.ini的功能完全没有.htaccess那么强大,规则上没有那么丰富,细节上也有很大的不同。...

    PHP中文手册(中文)

    名称 默认值 作用范围 功能 engine On PHP_INI_ALL 启用或禁用 PHP 解析 child_terminate Off PHP_INI_ALL 指定 PHP 脚本是否可以要求子进程在请求结束时终止,参见 apache_child_terminate() last_modified Off ...

    企业级Linux服务攻略

    3.4.2 DHCP多作用域设置 3.4.3 DHCP中继代理 3.5 DHCP客户端配置 3.5.1 Linux客户端配置 3.5.2 Windows客户端配置 3.6 DHCP服务配置排错 3.6.1 dhcpd 3.6.2 租约文件 3.6.3 ping 3.6.4 MULTICAST 3.6.5 查看系统...

    ISAPI_Rewrite3_0096_full 破解版 已测试

    分为商业版和免费的 Lite 版,商业版可以在每个站点放置一个 httpd.conf 来单独设置规则,免费版只能将规则写到安装目录下的 httpd.conf 文件中,作用于全局。 官方原版下载地址:...

    RegexRouter:PHP类使用正则表达式进行路由。 极小

    index.php和.htaccess文件只是演示用法。 TLD中的3将一起起作用。 设置 确保将所有请求发送到前端控制器(直接通过apache conf或htaccess) 包含或要求RegexRouter.php require_once 'RegexRouter.php'; 实例化一...

    PHP和MySQL Web开发第4版pdf以及源码

    1.13.1 测试和设置变量类型 1.13.2 测试变量状态 1.13.3 变量的重解释 1.14 根据条件进行决策 1.14.1 if语句 1.14.2 代码块 1.14.3 else语句 1.14.4 elseif语句 1.14.5 switch语句 1.14.6 比较不同的条件 ...

    PHP和MySQL WEB开发(第4版)

    1.13.1 测试和设置变量类型 1.13.2 测试变量状态 1.13.3 变量的重解释 1.14 根据条件进行决策 1.14.1 if语句 1.14.2 代码块 1.14.3 else语句 1.14.4 elseif语句 1.14.5 switch语句 1.14.6 比较不同的条件 1.15 通过...

    ISAPI_Rewrite3_0087_full 破解版

    ISAPI Rewrite 3相对以往的版本功能性上有了很大的进步,...分为商业版和免费的 Lite 版,商业版可以在每个站点放置一个 httpd.ini 来单独设置规则,免费版只能将规则写到安装目录下的 httpd.conf 文件中,作用于全局。

    PHP和MySQL Web开发第4版

    1.13.1 测试和设置变量类型 1.13.2 测试变量状态 1.13.3 变量的重解释 1.14 根据条件进行决策 1.14.1 if语句 1.14.2 代码块 1.14.3 else语句 1.14.4 elseif语句 1.14.5 switch语句 1.14.6 比较不同的条件 ...

    RED HAT LINUX 6大全

    9.2.2 .htaccess文件和访问限制 160 9.3 虚拟主机 161 9.3.1 基于地址的虚拟主机 161 9.3.2 基于名字的虚拟主机 162 9.4 日志记录 163 9.5 CGI和SSI 164 9.5.1 CGI 164 9.5.2 SSI 164 9.5.3 基本SSI指令 165 9.5.4 ...

    Apache之AllowOverride参数使用说明

    当此指令设置为 All 时,所有具有 “.htaccess” 作用域的指令都允许出现在 .htaccess 文件中。 而对于 URL rewrite 来说,至少需要把目录设置为 &lt; Directory&gt; AllowOverride FileInfo &lt; /Directory&gt; Allo

    TaskBoard:受看板启发的应用程序,用于跟踪需要完成的事情。 (不要忘记阅读Wiki页面!)

    任务板 风格的应用程序,用于跟踪需要完成的事情。 TaskBoard的目标是为功能强大且最小的...您为TaskBoard创建的目录必须设置AllowOverride以便.htaccess文件起作用。 您还必须安装并启用mod_rewrite 。 NGINX 去

    fly:用于 PHP 的 Fly MVC 框架

    在 apache httpd.conf 文件中,如果第一个不起作用,请将“AllowOverride None”设置为“AllowOverride FileInfo”或“AllowOverride All”。 这是确保 apache 读取 fly 文件夹中的 .htaccess 文件。 通过在 ...

    PHP3程序设计

    12.10.2 如何设置和读取cookie 196 12.10.3 客户端浏览器支持cookie吗 197 12.11 调试CGI程序 198 12.11.1 把输出发送到服务器日志 文件中 198 12.11.2 生成错误处理HTML页面 199 12.12 表单处理 200 12.12.1 HTML...

    Ubuntu权威指南(2/2)

    9.5.3 调整进程优先级的作用 263 第10章 proc文件系统 265 10.1 进程内存映像文件 266 10.2 系统配置信息 270 10.3 系统运行状态信息 273 10.4 系统可调参数 276 10.4.1 文件系统可调参数 277 10.4.2 系统内核可调...

Global site tag (gtag.js) - Google Analytics