伪静态与重定向--RewriteRule

环境:windows 10,phpstudy,sublime text。服务器使用Apache,网站根目录为E:\phpstudy\www\,所以.htaccess放在www目录下。

RewriteRule语法说明:

RewriteRule  模式匹配  替换的URL  [flags]

模式匹配使用perl语言的正则表达式语法,同时还可以使用一些rewrite预定义的变量

替换的URL支持模式匹配的结果和rewrite变量

多个flag用逗号隔开

例子1

此时根目录只有index.htm,将所有访问 *.htm的请求都重定向到  *.html

1

2

3

RewriteEngine On

RewriteRule ^(.*)\.htm$ $1.html

# $1在正则表达式中表示前面第一个匹配的子表达式,即.*部分 

注意配置中的RewriteEngine On表示开启重写,注意请求的URL是 index.htm ,重定向到index.html,但是地址栏仍然为index.htm

如果在根目录创建一个index.html文件,再刷新的话,结果就不同了:

RewriteRule R flag说明

R表示强制外部重定向,后面可以加301(永久重定向)或者302(暂时重定向)跳转,不加默认302(暂时重定向),加了R flag之后,地址栏的URL会改变

这两种重定向的区别在于:SEO搜索引擎对网站是有评分的,如果使用临时重定向,则不会将搜索引擎对以前URL的评分 给 临时重定向(新的)的网站URL,会为新的URL产生一个新的评分;而永久重定向则会将评分转给新的URL。

使用示例:

  此时根目录为空,仍旧访问localhost/index.htm

1

2

3

4

RewriteEngine On

RewriteRule ^(.*)\.htm$ $1.html [R]

#等价于下面这一条

#RewriteRule ^(.*)\.htm$ $1.html [R=302]

注意上面的图片中,外部重定向时,地址栏的URL发生了改变,并且是按照磁盘的路径去查找,而不是按照网站根目录去查找,这时可以在$1前面加一个斜线 / ,表示重定向的基地址为网站根目录,如下例:

1

2

3

4

RewriteEngine On

RewriteRule ^(.*)\.htm$ /$1.html [R]

#等价于下面这一条

#RewriteRule ^(.*)\.htm$ /$1.html [R=302]

创建index.html文件,再访问localhost/index.htm

RewriteRule C flag说明

C表示链接下一规则,如果在一条规则后面加了该flag后,这条规则就和下一条规则成为一个整体,如果这一条规则不匹配,那么下一条也不进行匹配,类似于“拉着别人下水的”的情景。

注意这里的匹配的时候,前一条的匹配之后,URL改变了,然后,将新的URL进行下一条规则的匹配。

实例:

  网站根目录下只有index.html和index.php文件,

1

2

3

RewriteEngine On

RewriteRule ^(.*)\.htm$     /$1.html [C]

RewriteRule ^(.*)\.html$    /$1.php

  现在结果如下图:

而如果直接访问index.html,那么因为不匹配第一条规则,所以不进行第二条规则匹配,不会重定向到index.php,会直接输出index.html的内容。

RewriteRule L flag说明

如果一条规则的后面添加了这个L flag,那么如果这条规则匹配,就不在进行下一条规则的匹配,如果改规则不匹配,则会继续进行下一规则的匹配。

实例:

  根目录下有index.html,index.php,访问index.htm,因为匹配到了第一条规则,并且后面有L flag,所以不会匹配下面一条

1

2

3

RewriteEngine On

RewriteRule ^(.*)\.htm$     /$1.html [L]

RewriteRule ^(.*)\.html$    /$1.php

  

如果直接访问index.html,因为第一条规则没有匹配,那么会接着匹配第二条规则。

RewriteRule NE flag 说明

不对URL中的字符进行hexcode转码,比如我们传递一个参数,那么

1

2

RewriteEngine On

RewriteRule ^(.*)\.htm$     /index.html#$1  [R]

访问localhost/index.htm

可以看到#被转移成了十六进制的%23,加上NE参数

1

2

RewriteEngine On

RewriteRule ^(.*)\.htm$     /index.html#$1  [R,NE]

  

 RewriteRule NC flag说明

NC是指在匹配时,不区分大小写。因为在Apache本身对大小写是敏感的,

实例:

1

2

RewriteEngine On

RewriteRule ^index.htm index.html

可以看到,并没有匹配第一条规则,因为此时是区分大小写的。加上NC之后,刷新:

1

2

RewriteEngine On

RewriteRule ^index.htm index.html [NC]

 RewriteRule G flag说明

表示请求的网页已经失效(对应响应码的410),并且停止后续规则的匹配

1

2

3

RewriteEngine On

RewriteRule .* - [G]

#RewriteRule .* index.html

 RewriteRule QSA flag说明

用于在URL中截取查询字段,也就是保留用URL传递的参数,因为默认是会将参数截取掉的

1

2

RewriteEngine On

RewriteRule ^per/(.*)$ /per.php?url=$1 [R]

  访问localhost/per/index.htm?id=5

如果没有QSA字段,传递的id=5被截取掉了。如果加上QSA字段:

1

2

RewriteEngine On

RewriteRule ^per/(.*)$ /per.php?url=$1 [R,QSA]

  再次访问localhost/per/index.htm?id=5

超级详细伪静态与重定向--RewriteRule,看不懂打死我相关推荐

  1. 伪静态与重定向--RewriteRule详解

    伪静态与重定向--RewriteRule 环境:windows 10,phpstudy,sublime text.服务器使用Apache,网站根目录为E:\phpstudy\www\,所以.htacc ...

  2. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  3. 伪静态与重定向--RewriteRule解释的比较清楚

    环境:windows 10,phpstudy,sublime text.服务器使用Apache,网站根目录为E:\phpstudy\www\,所以.htaccess放在www目录下. RewriteR ...

  4. 动漫:史上最简(详细)KMP算法讲解,看不懂算我输!

    刚关注阿广的朋友们可能不太了解我 我也做个自我介绍 不客气的讲 通过下面的小细节 你也可能体会到阿广一个什么样的人了 (以上为凑字数够300字发原创) 所以公共前后缀的条件为: 1.最长的前后缀 2. ...

  5. 树状数组(详细分析+应用),看不懂打死我!

    树状数组介绍 在学习一个算法之前一定要清楚它能干嘛,能解决什么样的问题,对你解题是否有帮助,然后才去学习它! 那么接下来看如下几个问题 什么是树状数组 顾名思义就是一个结构为树形结构的数组,于二叉树的 ...

  6. 伪静态与重定向--RewriteRule

    环境:windows 10,phpstudy,sublime text.服务器使用Apache,网站根目录为E:\phpstudy\www\,所以.htaccess放在www目录下. RewriteR ...

  7. Webpack安装、打包过程及开发过程超详细教程(专治看不懂学不会)

    说白了,webpack的主要作用就是把前端资源打包成浏览器可以识别的资源,前端资源更新换代的速度太快了,浏览器不一定能跟得上步伐,因此才有webpack这样的技术出现. npm的主要作用就是管理js依 ...

  8. sqlserver存储过程入门?看不懂打死我

    sqlserver存储过程入门 1.工具 2.基础知识 游标 DECLARE 赋值 set 赋值 into if else 代替 REPLACE CASE WHEN CONCAT 函数 字符串连接 B ...

  9. 看不懂掐死我系列之支持向量机(SVM)从原理到python代码实现

    在如下图所示的二分类问题里,我们在训练分类器时就是希望找到一个最优的超平面.直观来讲,我们希望找到如图所示的一个通道(Margin)能够区分正负样本,最大化其宽度,取其中间线为超平面.直观来说,这样得 ...

最新文章

  1. 03-vue-router
  2. python codecs模块
  3. 谷歌助力,快速实现 Java 应用容器化
  4. win8 C盘空间不足的几种解决方法
  5. 【php】php的ssh2扩展的安装
  6. 博弈-sg函数的原理和优化(hdu-1536)
  7. 计算机科学家和心理学家合作,生物智能与人工智能之间的合作
  8. 这所双非高校硕士生一作发Science!系学校上半年第13篇CNS!
  9. 封装的三级联动及应用
  10. QR code 二维码基础入门教程(二)
  11. browser.html – HTML 实现 Firefox UI
  12. 第一次使用pyqt5解决的几个小问题
  13. C/C++语言编程修养
  14. 【转】使用Python的Requests库进行web接口测试
  15. 【WPF】命令 --《深入浅出WPF》
  16. 夜天之书 #34 企业如何实践开源协同
  17. 使用stream报错:stream has already been operated upon or closed
  18. 【51CTO学院三周年】通往程序猿艰辛历程,幸好遇到51CTO学院
  19. 服务器上自动备份数据库突然不备份了
  20. ROS2—小海龟仿真器基础使用

热门文章

  1. 学习笔记——面向对象第八天
  2. 网站色调色彩搭配之情感表现
  3. “天天嚷嚷要裸辞,被劝退后傻眼了”
  4. 150829_理论_屏幕适配
  5. 北京物联展完美收官,拾联诠释“视频+物联网”新时代
  6. 预测未来30年趋势--读《必然》上
  7. java怎么判断数据类型_Java 数据类型及其判断
  8. 模拟键盘输入将自选股导入到交易师
  9. 车载OS - GENIVI (不是OS,只是一个车载软件相关的组织)
  10. 请求多个数据直到完成统一刷新