【后端开发实例】.htaccess 实例讲解 -(一)

来源:互联网 发布:高瓴资本红杉资本知乎 编辑:程序博客网 时间:2024/05/10 09:21

Question. 问题

在PHP系统中,在根目录下会有一个入口文件 index.php,即用户在浏览器地址栏中输入一个网址,首先都会进入到这个入口,然后由这个入口文件来分配具体文件来执行用户的请求。

而这个将用户的网址重定向到入口文件 index.php的文件,一般就是通过 .htaccess 实现。所以在根目录下,往往主要都会有这两个文件:

这里写图片描述

同时,使用 .htaccess 还能实现伪静态的效果,比如,用户输入的是 http://www.xxx.com/a.html 这样一个静态 html 文件,而实际上则会交由 http://www.xxx.com/index.php 来处理。

Solution. 实现

这里写图片描述

这是一个完整的 .htaccess 文件,这个文件的作用简单地说就是将 http://www.xxx.com/a.html?q=abc 这样一个 URL 请求,封装成 http://www.xxx.com/index.php?p=a&q=abc

我们来看每一条语句的作用:

RewriteEngine On  // 开启重写引擎 Off为关闭                  // 只有在开启的情况下,下面的语句才会生效RewriteBase /   // 匹配从第一个 / 后开始,即不会匹配前面的域名                // 例如http://www.xxx.com/a.html 只匹配a.html//  RewriteCond 重写条件,只有满足了重写条件,下面的语句才会执行#RewriteCond %{REQUEST_FILENAME} !-f    // 请求的文件不存在#RewriteCond %{REQUEST_FILENAME} !-d    // 请求的路径不存在                                        // 如果文件或路径存在将返回已经存在的文件或路径RewriteRule ^(.*)\.html$ /index.php?p=$1&%{QUERY_STRING} [L]// 重写规则 只有当上面的RewriteCond条件都满足的时候,将会执行此重写规则// ^(.*)\.html$是一个正则匹配,匹配当前的URL,但是要从第一个/开始,即匹配a.html// ^(.*)表示匹配任意字符 ^表示字符串开始,.表示任意单个字符,*表示匹配0次或N次(N>0)// \.html$表示匹配.html $表示字符串结尾,\.表示转义的. // /index.php?p=$1&%{QUERY_STRING}是重写部分,$1表示反向匹配,引用第一个圆括号中的内容// QUERY_STRING表示?后面的内容// [L] 表示最后一条语句

Extension. 扩展阅读

本文参考资料:
[1]. .htaccess 详解
[2]. Apache中重写URL参数