apache 伪静态

伪静态

看起来是静态的html页面,但是实际上是动态处理的页面。

静态页面

html页面属于静态页面,就是网页内容是固定的,如果想要动态显示一些内容,可以通过ajax来实现。

伪静态 vs 静态页面

  • 从URL结构以及页面名称看,伪静态和静态页面是一样的。伪静态的页面后缀可以是html htm 或者是目录格式
  • 伪静态只是改变了URL的表现形式,实际上还是动态页面
  • 静态页面可以节省服务器资源,而伪静态严格说是增加服务器资源消耗的

apache 伪静态

apache通过开启mod_rewrite模块就可以实现伪静态。

  • 修改配置文件, AllowOverride None => AllowOverride All
  • 添加.htaccess文件,编写rewrite规则

.htaccess文件

apache实现伪静态的配置文件,通过此文件不仅可以实现伪静态,还可以修改一些php的配置,比如修改默认上传文件的大小,可以设置是否开启缓存,可以控制防盗链,设置错误页面

php_value post_max_size 12m
php_value upload_max_filesize 12m
php_value max_execution_time 120
php_value max_input_time 240

<FilesMatch ".(gif|jpg|jpeg|png|ico)$">
Header set Cache-Control "max-age=86400"
</FilesMatch>

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?baidu.com(/)?.*$     [NC]
RewriteRule .*\.(gif|jpg|jpeg|bmp|png)$ https://www.baidu.com [R,NC,L]

ErrorDocument 404 404.html
ErrorDocument 500 error.html

.htaccess rewrite规则

  • flag标识
flag 含义
B 转义非字母和数字的字符
BNP 转义空格
C 链式规则,一条失败,都失败
CO 设置cookie
E 设置环境变量值
F 禁止访问
L 匹配为最后一条规则,匹配成功之后,不检索后面的匹配
NC 不检查大小写
N 循环匹配
QSA 将查询拼接
PT 将文件路径视为URI
R 重新定向
S 跳过规则
  • RewriteCond (条件判断)
RewriteCond TestString CondPattern 
  1. !表示取反
  2. 使用逻辑运算符<,>,=,<=,>=
  3. 数字比较 -eq,-gt,-ge,-le,-lt,-ne
  4. 文件属性比较

-f 是否是文件 -d 是否是目录 -h 是否是链接 -l 是否是链接 -U 是否是存在的URL -x 是否有可执行权限

RewriteCond %{HTTP_USER_AGENT} "=This Robot/1.0"

RewriteCond /var/www/%{REQUEST_URI} !-f

判断一个文件是否在指定目录存在,如果存在进行rewrite

RewriteCond %{DOCUMENT_ROOT}/html/%{HTTP_HOST}/$1.html -f
RewriteRule ^(.*)$ html/%{HTTP_HOST}/$1.html 

thinkcmf伪静态,pathinfo模式处理

RewriteRule ^(.*)?$ index.php  [E=PATH_INFO:$1,QSA,PT,L]