浅说 Rewrite规则简介

1.Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言。可基于服务器级的(httpd.conf)和目录级的(.htaccess)两种方式。如果要想用到rewrite模块,必须先安装或加载rewrite模块。方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。
基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下直接利用RewriteEngine on来打开rewrite功能;另一种是在局部里利用RewriteEngine on来打开rewrite功能,下面将会举例说明,需要注意的是,必须在每个virtualhost里用RewriteEngine on来打开rewrite功能。否则virtualhost里没有RewriteEngine on它里面的规则也不会生效。
基于目录级的(.htaccess),要注意一点那就是必须打开此目录的FollowSymLinks属性且在.htaccess里要声明RewriteEngine on。
重写规则的作用范围,有如下三种:
1) 可以使用在Apache主配置文件httpd.conf中
2) 可以使用在httpd.conf里定义的虚拟主机配置中
3) 可以使用在基本目录的跨越配置文件.htaccess中
首先,apache在编译时将mod_rewrite编译为模块,然后在Apache的配置文件中加载它:
LoadModule rewrite_module modules/mod_rewrite.so
其次,这三种方式,都需要在写规则前,用“RewriteEngine on”指令来打开rewrite功能。
假如你对你的的网站内容所在的服务器没有管理员权限,或者你的网站放在ISP的服务器上托管等等条件下,你无法改写主配置文件,然而你可以对你的WEB站 点内容所在的目录有写权限,则你可以设置自己的.htaccess文件。 (本博客站点就有设置.htaccess文件做rewrite。)对文件.htaccess所作的任何改动不需要重启动Apache. 不过,值得注意的是,需要确定主配置文件中对你的网站所在的目录定义了下面的内容:
Options Indexes FollowSymLinks
AllowOverride all
否则你的.htaccess文件配置不会工作。

2、举例说明:
例一.下面是在一个虚拟主机里定义的规则。功能是把client请求的主机前缀不是www.kiya.cn和70.40.213.183都跳转到主机前缀为http://www.kiya.cn,避免相同内容的网页有多个指向的域名,如http://kiya.cn。
NameVirtualHost 70.40.213.183:80
ServerAdmin slj@kiya.cn
DocumentRoot “/web”
ServerName kiya.cn
RewriteEngine on #打开rewirte功能
RewriteCond %{HTTP_HOST} !^www.kiya.cn [NC] #声明Client请求的主机中前缀不是www.kiya.cn,其中 [NC] 的意思是忽略大小写
RewriteCond %{HTTP_HOST} !^70.40.213.183 [NC] #声明Client请求的主机中前缀不是70.40.213.183,其中 [NC] 的意思是忽略大小写
RewriteCond %{HTTP_HOST} !^$ #声明Client请求的主机中前缀不为空
RewriteRule ^(.*) http://www.kiya.cn/ [L] #含义是如果Client请求的主机中的前缀符合上述条件,则直接进行跳转到http://www.kiya.cn/,[L]意味着立即停止重写操作,并不再应用其他重写规则。这里的.*是指匹配所有URL中不包含换行字符,()括号的功能是把所有的字符做一个标记,以便于后面的应用.就是引用前面里的(.*)字符。
例二.将输入 en.sicasoft.com 的域名时跳转到www.sicasoft.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^en.sicasoft.com [NC]
RewriteRule ^(.*) http://www.sicasoft.com/ [L]
例三.赛卡软件近期更换了域名,新域名为www.sicasoft.com, 更加简短好记。这时需要将原来的域名ss.kiya.cn, 以及论坛所在地址ss.kiya.cn/bbs/定向到新的域名,以便用户可以找到,并且使原来的论坛 URL 继续有效而不出现 404 未找到,比如原来的http://ss.kiya.cn/bbs/tread-60.html, 让它在新的域名下继续有效,点击后转发到http://bbs.sicasoft.com/tread-60.html,而其他网页,如原先的http://ss.kiya.cn/purchase不会到二级域名bbs.sicasoft.com/purchase上,而是到www.sicasoft.com/purchase
按照这样的要求重定向规则应该这样写:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/bbs/
RewriteRule ^bbs/(.*) http://bbs.sicasoft.com/$1 [R=permanent,L]
RewriteCond %{REQUEST_URI} !^/bbs/
RewriteRule ^(.*) http://www.sicasoft.com/$1 [R=permanent,L]
3.Apache mod_rewrite规则重写的标志一览
1) R[=code](force redirect) 强制外部重定向
强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。
2) F(force URL to be forbidden)禁用URL,返回403HTTP状态码。
3) G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。
4) P(force proxy) 强制使用代理转发。
5) L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。
6) N(next round) 重新从第一条规则开始运行重写过程。
7) C(chained with next rule) 与下一条规则关联
如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。
8) T=MIME-type(force MIME type) 强制MIME类型
9) NS (used only if no internal sub-request) 只用于不是内部子请求
10) NC(no case) 不区分大小写
11) QSA(query string append) 追加请求字符串
12) NE(no URI escaping of output) 不在输出转义特殊字符
例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zoo
13) PT(pass through to next handler) 传递给下一个处理
例如:
RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理
Alias /def /ghi
14) S=num(skip next rule(s)) 跳过num条规则
15) E=VAR:VAL(set environment variable) 设置环境变量

转载于:https://www.cnblogs.com/bigcome/p/6795739.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 二进制乘法,xor(乘法英语单词)

For a 1 To 4 For b 1 To 4 For c 1 To 4 For d 1 To 4 If (a 1 Xor b 2) .xor 是异或运算两个整数进行XOR运算,是怎样的算法?XOR为异或运算,对于布尔型的运算,当2者都为ture或者false时,则返回false&#xff0c…

php聊天功能逻辑原理,@xxx提及用户,这种功能的实现原理是怎样的?

122014-12-13 22:05:54 08:00 1在牛客网 http://www.nowcoder.com 用户在我们网站提交的评论,我们会进行敏感词过滤,其算法是基于有限状态机DFA过滤的。 我觉得可以用敏感词过滤的方法来查找的用户ID。 (用户ID就是好多敏感词), 具体的代码…

strcpy、memcpy和memset的区别

strcpy 原型&#xff1a;extern char *strcpy(char *dest,char *src); 用法&#xff1a;#include <string.h> 功能&#xff1a;把src所指由NULL结束的字符串复制到dest所指的数组中。 说明&#xff1a;src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的…

php cli和fastcgi,php的几种运行模式CLI、CGI、FastCGI、mod_php

1、CLI:就是命令行&#xff0c;例如可以在控制台或者是shell中键入命令:php -f index.php然后获取输出2、CGI:以下是不同的说法与理解公共网关接口”(Common Gateway Interface)&#xff0c;HTTP服务器 与你的或其它机器上的程序 进行 “交谈”的一种工具 &#xff0c;其程序 须…

自学前端,你要的学习资料到了~~~~~~

你要的学习资料到了~~~~~~ 你还在找一个纯技术交流的地方嘛?你还在找一个每天更新资料的群吗&#xff1f;现在加裙617986737&#xff0c;无论是小白还是大神&#xff0c;可以尽情的讨论。 加裙条件&#xff1a; 1&#xff1a;保证自己常在线&#xff0c;一直沉默潜水的人不许加…

html文档php 取mac地址_cpu序列号_硬盘序列号,用vbs脚本获取网卡MAC,CPUID,硬盘序列号的实现代码...

这里先给大家分享一个分配静态ip地址的代码 Assign a Static IP AddressstrComputer "."Set objWMIService GetObject("winmgmts:" _& "{impersonationLevelimpersonate}!\\" & strComputer & "\root\cimv2")Set colNet…

T7-Dropout 解决 overfitting 过拟合

Dropout 解决 overfitting 相对于过拟合&#xff08;overfitting&#xff0c;或称&#xff1a;过度学习&#xff09;是指&#xff0c;使用过多参数&#xff0c;以致太适应训练数据而非一般情况&#xff1b;另一种常见的现象是使用太少参数&#xff0c;以致于不适应当前的训练数…

PHP伪造来源HTTP,伪造来源采集http.php

伪造来源采集.php"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11","safari 5.1 – Windows">"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gec…

从零开始构建一个的asp.net Core 项目(一)

最近突发奇想&#xff0c;想从零开始构建一个Core的MVC项目&#xff0c;于是开始了构建过程。 首先我们添加一个空的CORE下的MVC项目&#xff0c;创建完成之后我们运行一下&#xff08;Ctrl F5&#xff09;。我们会在页面上看到“Hello World!”。 既然是从零开始构建的项目&am…

oracle sal01,oracle中 all any in的用法

Oracle的嵌套子查询可以使用Some,Any和All对子查询中返回的多行结果进行处理。Some表示满足其中一个的含义&#xff0c;是用or串起来的比较从句。例如&#xff1a;SELECT * FROM emp WHERE empno hmz OR dept 10Any也表示满足其中一个的含义&#xff0c;也是用or串起来的比较…

BZOJ 4884 [Lydsy2017年5月月赛]太空猫(单调DP)

【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id4884 【题目大意】 太空猫(SpaceCat)是一款画面精致、玩法有趣的休闲游戏&#xff0c;   你需要控制一只坐在迷你飞碟上的猫咪在太空里不断探索&#xff0c;让大家看看你能飞得多远。   游戏地图可以看成一个…

oracle 怎么创建类型,ORACLE—002:Create之创建类型

——积累工作中用到的SQLORACLE中也是有类型的&#xff0c;可作为存储过程&#xff0c;函数等的输入输入出。下面看下创建。用法CREATE OR REPLACE TYPE 类型名称 AS OBJECT(字段1 类型,字段2 类型,字段3 类型)例如CREATE OR REPLACE TYPE T_OBJ A…

201521123014 《Java程序设计》第11周学习总结

201521123014 《Java程序设计》第11周学习总结 1. 本周学习总结 1.1 以你喜欢的方式&#xff08;思维导图或其他&#xff09;归纳总结多线程相关内容。 2. 书面作业 Q1 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步…

前端先锋博客大全

须要想这些人学习&#xff1a; http://www.nowamagic.net/librarys/veda/cate/JavaScript/ 唯有积累&#xff0c;没有奇迹 http://www.zhangxinxu.com/wordpress/ 张鑫旭 http://www.14px.com/ 14px http://hax.iteye.com/category/20374 hax http://w3help.org/zh-cn/ http:…

oracle死锁视频教程,两个Oracle死锁解决实例

关于数据库中的死锁。如果在应用中碰到都会毫不犹豫转交给DBA&#xff0c;但是从目前我接到的deadlock的问题来看&#xff0c;和Oracle官方的描述基本都关于数据库中的死锁。如果在应用中碰到都会毫不犹豫转交给DBA&#xff0c;但是从目前我接到的deadlock的问题来看&#xff0…

FineReport实现java报表统计图表的效果图

Java报表-ERP图表联动 Java报表-多维坐标轴图 Java报表-静态图表 Java报表-时间坐标轴 Java报表-图表报表动态交互 Java报表-图表热点链接 Java报表-图表缩放 Java报表-地图-广州市商场销售分析 Java报表-地图-全国商场销售分析 Java报表-地图-商场柜台销售分析 Java报表-图表分…

Mysql 性能优化20个原则(2)

5. 在Join表的时候使用相当类型的例&#xff0c;并将其索引 如果你的应用程序有很多 JOIN 查询&#xff0c;你应该确认两个表中Join的字段是被建过索引的。这样&#xff0c;MySQL内部会启动为你优化Join的SQL语句的机制。 而且&#xff0c;这些被用来Join的字段&#xff0c;应该…

安装apk文件到linux,使用adb命令,将apk安装到安卓system/app下

adb环境变量配置&#xff1a;1.下载android sdk2.win10配置adb环境变量&#xff0c;控制面板-系统-高级系统设置-高级-环境变量-系统变量-在Path中增加adb.exe的路径E:\sdk\platform-tools3.重新打开cmd&#xff0c;输入adb&#xff0c;可识别即可安装xxx.apk到system下&#x…

使用Dom4j读取指定文件,并写入指定文件

导入dom4j的包&#xff0c;然后写入代码如下package com.dom4j.cn;import java.io.FileOutputStream;import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import org.ju…

linux ks脚本,Linux ks.cfg 详解

linux安装大致可以分为2个阶段第一阶段&#xff1a;anaconda第二阶段&#xff1a;installinstall阶段系统会按照anaconda阶段设定的参数自动安装&#xff0c;这里主要要说的是anaconda阶段&#xff0c;此阶段是linux的预安装环境&#xff0c;提供linux安装选项的一个接口&#…