Apache伪静态

配置开启伪静态模块

  • 打开配置文件httpd.conf
  • 启用rewrite
    1
    # LoadModule rewrite_module modules/mod_rewrite.so    //去除前面的 #
  • 启用.htaccess
  • 在虚拟机配置项中
    AllowOverride None 修改为:AllowOverride All

Rewrite 写法

  • 测试htm 跳转到html文件
    • 根目录下建一个.htaccess文件写入一下内容
      1
      2
      RewriteEngine on
      RewriteRule ^(.*)\.htm$ $1.html
    • RewriteEngine on 启用重写
    • RewriteRule ^(.*)\.htm$ $1.html 重写规则 匹配任意开头名称并且以.htm结尾的请求 转到匹配的名称以.html结尾的地址

301/302跳转

1
2
RewriteEngine on
RewriteRule ^(.*)\.htm$ /$1.php [R=301]
  • 跳转区别
    • 301永久重定向,地址连地址会发生变化
    • 302临时重定向,地址栏不会发生变化

RewriteRule C flag

  • 与下一条规则成为一个整体,如果这一条不匹配,吓一跳就不进入
    1
    2
    RewriteRule ^(.*)\.htm$ /$1.html [c]
    RewriteRule ^(.*)\.html$ /$1.php
  • 访问1.htm可以匹配第一条,会接着进入下条规则,相反如果当前这一条不匹配就不会进入下一条
  • 访问1.htm -> 转到 1.php
  • 访问1.html -> 将不会重写

RewriteRule L flag

  • 匹配到后,就停止后边匹配
    1
    2
    RewriteRule ^(.*) 1.php?url=$1 [L]
    RewriteRule ^(.*) 2.php?url=$2
  • [L]第一条匹配到后后边就不会走了
  • 如果不加[L] 两条都会匹配

RewriteRule NE flag

  • 不对url中的特殊字符进行hexcode转码
    1
    RewriteRule ^(.*)\.htm /index.php#$1 [R,NE]

RewriteRule NC flag

  • 匹配地址不区分大小写
    1
    RewriteRule ^test/(.*) test_new/$1 [NC]

RewriteRule G flag

  • 请求的网页已经失效了
    1
    RewriteRule ^(.*)\.htm$  - [G]

RewriteRule QSA flag

  • 用于在url中截取查询字符串
    1
    RewriteRule ^(.*)\.htm$  /index.php?r=$1 [QSA,R]

RewriteBase URL-path

  • 设置目录级重写的基准url, 访问文件路径前加上基础目录
  • RewriteBase /test/
    1
    RewriteRule ^(.*)\.htm$  $1.html

RewriteCond

  • 指定一个过多个规则条件,在RewriteRule 中匹配到执行
    1
    2
    RewriteCond $1 'test'
    RewriteRule ^(.*)\.htm$ /$1.html
  • 只有匹配到条件test才会重写
  • 通过系统常量定义
    1
    2
    RewriteCond %{HTTP_HOST} '127.0.0.1'
    RewriteRule ^(.*)\.htm http://localhost/$1.html [R]
  • 多级条件
    1
    2
    3
    RewriteCond %{HTTP_HOST} '127.0.0.(.*)'
    RewriteCond %1 "1"
    RewriteRule ^(.*)\.htm http://localhost/$1.html [R]
  • OR 多级判断默认是AND
  • 图片防盗链
    1
    2
    3
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !localhost [NC]
    RewriteRule \.(gif|jpg|png)$ [F,NC]
  • 防盗链所有图片转到logo图
    1
    2
    3
    4
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !localhost [NC]
    RewriteRule ^(.*)logo\.png$ $1logo.png [NC,L]
    RewriteRule \.(gif|jpg|png)$ /logo.png [R]