当前位置 主页 > 服务器问题 > Linux/apache问题 >

    apache .htaccess文件详解和配置技巧总结

    栏目:Linux/apache问题 时间:2019-10-08 23:01

    一、.htaccess的基本作用

           .htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令。
           .htaccess主要的作用有:URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。
           .htaccess的用途范围主要针对当前目录。


    二、启用.htaccess的配置
    启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。
    打开httpd.conf文件用文本编辑器打开后,查找
    复制代码 代码如下:
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    改为:
    <Directory />
    Options FollowSymLinks
    AllowOverride All
    </Directory>

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

    三、.htaccess访问控制

    1、访问控制基础:Order命令

          为了限制用户访问一些关键目录,通常加入.htaccess文件,常见的写法如下:
    复制代码 代码如下:
    <Files  ~ "^.*\.([Ll][Oo][Gg])|([eE][xX][eE])">
     Order allow,deny
     Deny from all
    </Files>

    说明:

    (1)Files后的波浪线表示启用“正则表达式”,简单的写法有:<Files *>。

    (2)Order命令:通过Allow,Deny参数,Apache首先找到并应用Allow命令,然后应用Deny命令,以阻止所有访问,也可以使用Deny,Allow。

    四、URL重写

    下面是一段简单的URL重写规则示例:
    复制代码 代码如下:
    # 将 RewriteEngine 模式打开
    RewriteEngine On
    # Rewrite 系统规则请勿修改
    RewriteRule ^p/([0-9]+)\.html$ index.php?post_id=$1
    RewriteRule ^u-(username|uid)-(.+)\.html$ space.php?$1=$2

    其中,RewriteEngine 表示开启URL重写,RewriteRule是重写规则。

    五、配置错误页面

    基本语法如下:
    复制代码 代码如下:
    # custom error documents
    ErrorDocument 401 /err/401.php
    ErrorDocument 403 /err/403.php
    ErrorDocument 404 /err/404.php
    ErrorDocument 500 /err/500.php

    六、htaccess常用命令和配置技巧
    1.禁止显示目录列表
    有些时候,由于某种原因,你的目录里没有index文件,这意味着当有人在浏览器地址栏键入了该目录的路径,该目录下所有的文件都会显示出来,这会给你的网站留下安全隐患。
    为避免这种情况(而不必创建一堆的新index文件),你可以在你的.htaccess文档中键入以下命令,用以阻止
    目录列表的显示:
    复制代码 代码如下:Options -Indexes
    2.阻止/允许特定的IP地址
    某些情况下,你可能只想允许某些特定IP的用户可以访问你的网站(例如:只允许使用特定ISP的用户进入某个目录),或者想封禁某些特定的IP地址(例如:将低级用户隔离于你的信息版面外)。当然,这只在你知道你想拦截的IP地址时才有用,然而现在网上的大多数用户都使用动态IP地址,所以这并不是限制使用的常用方法。
    你可以使用以下命令封禁一个IP地址: