什么是htaccess文件?

平时部署WEB项目经常遇到美化url的需求,一般习惯性的上网搜索复制一个,很容易就解决问题。可每次在需要时候搜索粘贴,一般的美化、伪静态还好,遇到特殊一点的就要花费更多时间去尝试,很浪费时间。所以了解使用htaccess文件很有必要。

htaccess(超文本访问)文件是多个 Web 服务器支持的目录级配置文件,用于配置网站访问问题,例如 URL 重定向、URL 缩短、访问控制(针对不同的网页和文件)等。文件名前的“点”,使其成为基于 Unix 的环境中的隐藏文件。一个网站可以有多个htaccess文件,它只适用于Apache HTTP服务器

上面是百科的基本描述,重要在于只适用于Apache,所以有时候即使删除掉这个文件也对应用的运行没有任何影响。

怎么使用htaccess文件?

  1. 使用前提

    A. 在Apache配置文件中开启重写

    <Directory>
        AllowOverride None
        Require all denied
    </Directory>
    

    改为下面

    <Directory "你的网站根目录">
        AllowOverride All
        Require all denied
    </Directory>
    

    B. 若没有生效,在Apache配置文件中检查是否加载 mod_rewrite 模块,去掉前面的#号既可

    #LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
  2. htaccess文件语法

    RewriteEngine On | Off //开启或关闭
    RewriteBase /app/   //设置当前htaccess文件中所有规则的相对路径
    
    //校验选项,在Rule前可以有多条Cond,只有校验正常才会执行Rule
    RewriteCond %{REQUEST_FILENAME} !-f // 设置一个校验条件,这里指访问的路径不是一个文件时
    RewriteCond %{REQUEST_FILENAME} !-d // 设置一个校验条件,这里指访问的路径不是一个目录时
    
    RewriteRule main index.php [L] // 设置一条规则,这里是指当请求/main的时候会重定向到/index.php,[L]表示停止处理下面的规则
    
  3. 实际应用

    以上就是htaccess的基本使用,常用到的语法并不多。在Rule语法那里main = index.php是固定写法,一个项目中有很多请求,难道还要都这里配置一遍吗?

    当然不用,这里引出mod_rewrite的模块的作用,它是一个基于正则表达式分析器的重写引擎来实时重写URL请求,所以在Rule那里的main index.php 可以根据自己的需要定义。

附注

A. Rewritecond 的常用校验标示

标示 作用
-d 是否目录
-f 是否文件
-s 是否非空文件

B. RewriteRule 的常用结尾标示 (可以以逗号分割设置多个)

标示 作用
R 返回302重定向
F 返回403禁止存取
G 返回410标记不存在
L 结束处理下面的规则
QSA 将url的?部分附加到新地址

结尾

经过简单梳理后对htaccess文件已经大致清楚,可要想随心所欲的写出适用的规则,正则表达式 是绕不开的基础。

这里记录下常见的简单例子

RewriteRule  ^p/([0-9]+)\.html$   index.php?pid=$1
//解析: ^是开始正则的位置; ()是正则取值小组位;\ 是转义符;& 是结束正则的位置;
// 这条规则的作用是把 xfol.cc/p/数字.html 的url转换为  xfol.cc/index.php?pid=数字
// xfol.cc/p/2.html     =     xfol.cc/index.php?pid=2
RewriteRule ^a-(id|title)-(.+)\.html$ article.php?$1=$2
// 这条规则的作用是把 xfol.cc/a-`id`或`title`-字符.html  的url转换为 xfol.cc/article.php?`id`或`title`=字符
//xfol.cc/a-title-hello.html     =    xfol.cc/article.php?title=hello
//xfol.cc/a-id-59.html     =     xfol.cc/article.php?id=59

这里是一个线上测试htaccess的网站: htaccess tester

By 雪峰

One thought on “htaccess文件到底怎么用?”
  1. htaccess 文件可以在存在多个,默认找根目录下,在其他目录也可以单独设置。
    比如/a目录下存在,则跳转到/a后这里的重写可单独生效

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注