htaccess与userini


浅谈.htaccess与.user.ini

.htaccess

  1. 基本概念

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

    .htaccess 中有 # 单行注释符,且支持 \ 拼接上下两行。

  2. 作用范围

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

  3. 配置文件

    启动 .htaccess,需要在服务器的主配置文件中将 AllowOverride 设置为 All,例如在 apache2.conf 中:

    AllowOverride  All    # 启动.htaccess文件的使用

    也可以通过 AccessFileName 将 .htaccess 修改为其他名:

    AccessFileName  .config    # 将.htaccess修改为.config
  4. .htaccess 常见指令

    .htaccess 可以实现网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。这里我们主要讲解几种常利用的指令。详情请看官方文档:http://www.htaccess-guide.com/

    SetHandler

    SetHandler 指令可以强制所有匹配的文件被一个指定的处理器处理。

    • 用法:

      SetHandler handler-name|None
    • 示例 1:

      SetHandler application/x-httpd-php

      此时当前目录及其子目录下所有文件都会被当做 php 解析。

    • 示例 2:

      SetHandler server-status

      开启 Apache 的服务器状态信息(server-status 是 Apache 自带一个查看 Apache 状态的功能模块),可以查看所有访问本站的记录

      访问任意不存在的文件,加参数 ?refresh=5 来实现每隔 5s 自动刷新。

    AddHandler

    AddHandler 指令可以实现在文件扩展名与特定的处理器之间建立映射。

    • 用法:

      AddHandler handler-name extensive [extensive] ...
    • 示例:

      AddHandler cgi-script .xxx

      即将扩展名为 .xxx 的文件作为 CGI 脚本来处理。

    AddType

    AddType 指令可以将给定的文件扩展名映射到指定的内容类型。

    • 用法:

      AddType media-type extensive [extensive] ...
    • 示例 1:

      AddType application/x-httpd-php .gif

      此时将会把 gif 为后缀的文件当做 php 文件解析。

    • 示例 2:

      AddType application/x-httpd-php png jpg gif

      此时将会把 .png .jpg .gif 多个后缀的文件当做 php 解析。

    php_value

    当使用 PHP 作为 Apache 模块时,可以用 Apache 的配置文件(例如 httpd.conf)或 .htaccess 文件中的指令来修改 PHP 的配置设定。但是需要有开启 AllowOverride Options 或 AllowOverride All 权限才可以。

    php_value 指令用来设定指定的 PHP 的配置值。要清除先前设定的值,把 value 设为 none。但是 php_value 不能用来设定布尔值,如果要设定布尔值的话应该用 php_flag。

    • 用法:

      php_value name value

      但是并不是所有的 PHP 配置都可以用 php_value 来设定,如下查看配置可被设定范围:

      如上图可知 .htaccess 的 php_value 只能用于 PHP_INI_ALL 或 PHP_INI_PERDIR 类型的指令。

    • 示例:

      php_value auto_prepend_file images.png

      设置访问一个 PHP 文件时,在该文件解析之前会先自动包含并解析 images.png 文件。

    php_flag

    php_flag 指令用来设定布尔值类型的 PHP 配置选项。

    • 用法:

      php_flag name on|off

      一样的,php_flag 可以设定的配置也是有范围的,如下查看配置可被设定范围:

    • 实例:

      php_flag engine 0

      将 engine 设置为 0,即在本目录和子目录中关闭 PHP 解析,可以造成源码泄露。

.htaccess 的常见利用

源码泄露

我们可以通过 .htaccess 文件的 php_flag 指令对 PHP 的 engine 配置选项进行设定,当把 engine 的值设为 off(或 0)时可以禁用一个本目录和子目录中的 PHP 解析,此时将会造成源码泄露:


文章作者: Cu3tuv0
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Cu3tuv0 !
评论
  目录