RewriteCond与RewriteRule用法
Rewrite重写任务基本上都是由RewriteCond和RewriteRule两个命令配合完成。
首先看一段简单代码:
1
2
3
|
RewriteBase /
RewriteCond %{http_host} ^softwhy.com$ [NC]
RewriteRule ^(.*)$ http: //www .softwhy.com/$1 [R=301]
|
下面对上述代码做一下分析:
(1).RewriteBase /规定根目录为基准路径,具体参阅.htaccess RewriteBase用法一章节。
(2).RewriteCond规定重写的条件,如果条件成立,那么将会执行RewriteRule所规定的重写规则。
具体代码细节,后面会做介绍,它实现不带www的URL跳转到带有www的URL,比如:
1
2
3
|
softwhy.com /article-451-1 .html
# 跳转到如下链接
www.softwhy.com /article-451-1 .html
|
一.RewriteCond命令:
它用来定义重写规则执行的条件。
语法结构:
1
|
RewriteCond String Pattern [flags]
|
定义一个条件,当String所规定的内容与Pattern规则匹配时,才会执行RewriteRule规定重写。
参数解析:
1.String:纯文本的字符串,除了包含普通的字符外,还可以包括下列的可扩展结构:
(1).$N:RewriteRule后向引用。$N引用紧跟在RewriteCond之后的RewriteRule中Pattern的小括号中的规则在当前URL中匹配的内容。N是0 <= N <= 9之间的整数。
(2).%N:RewriteCond后向引用 。%N引用最后一个RewriteCond的Pattern中的小括号中的规则在当前URL中匹配的内容。N是0 <= N <= 9之间的整数。
2.Pattern:应用于当前实例TestString的正则表达式 ,还可以包括以下扩展:
(1).!:表示TestString不与当前正则匹配;格式是!CondPattern。
(2).>: 将condPattern作为普通字符串与String比较,String大于Pattern为真;格式是>Pattern。
(3).=:将condPattern作为普通字符串与String比较,String与Pattern相同时为真;格式是=Pattern。
(4).-d:将String当作一个目录名,检查它是否存在以及是否是一个目录;格式是-d。
(5).-f:将String当作一个文件名,检查它是否存在以及是否是一个文件;格式是-f。
(6).-s:将String当作一个文件名,检查它是否存在以及是否是一个长度大于0的文件;格式是-s。
(7).-l: 将String当作一个文件名,检查它是否存在以及是否是一个 symbolic link;格式是-l。
(8).-F:检查String是否是一个合法的文件,而且通过服务器范围内的当前设置的访问控制进行访问。检查通过一个内部subrequest完成的, 因此需要谨慎使用,以防止降低服务器的性能。
(9).-U:检查String是否是一个合法的URL,而且通过服务器范围内的当前设置的访问控制进行访问。检查通过一个内部subrequest完成的, 因此需要谨慎使用,以防止降低服务器的性能。
3.[flags]:多个标志之间用逗号分隔。
(1).NC:表示不区分大小写。
(2).OR:默认的情况下,二个条件之间是AND的关系,用这个标志将关系改为OR。
二.RewriteRule命令:
它用来规定当RewriteCond条件满足时要执行的规则。
语法结构:
1
|
RewriteRule Pattern Substitution [flags]
|
参数解析:
1.Pattern:作用于当前URL的正则表达式;此url不包含协议、域名和查询字符串部分。
2.Substitution:当RewriteCond满足时,用来替换原始URL指定内容的字符串,还可以包括以下扩展:
(1).$N:RewriteRule后向引用。$N引用紧跟在RewriteCond之后的RewriteRule中Pattern的小括号中的规则在当前URL中匹配的内容。N是0 <= N <= 9之间的整数。
(2).%N:RewriteCond后向引用 。%N引用最后一个RewriteCond的Pattern中的小括号中的规则在当前URL中匹配的内容。N是0 <= N <= 9之间的整数。
3.[flags]:多个标志之间用逗号分隔,下面是常见的一些flag:
(1).R:表示重定性,[R=301]表示301重定向,默认是302重定向。
(2).F:强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的)。
(3).G:强制当前URL为已废弃的,即,立即反馈一个HTTP响应代码410(已废弃的)。
(4).L:立即停止重写操作,并不再应用其他重写规则。
(5).N:重新执行重写操作(从第一个规则重新开始). 这时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理的URL。
(6).C:此标记使当前规则与下一个(其本身又可以与其后继规则相链接的, 并可以如此反复的)规则相链接。 它产生这样一个效果: 如果一个规则被匹配,通常会继续处理其后继规则, 即,这个标记不起作用;如果规则不能被匹配,则其后继的链接的规则会被忽略。
(7).NC:忽略大小写。
(8).QSA:此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。
代码实例:
1
2
|
RewriteCond %{http_host} ^softwhy.com$ [NC]
RewriteRule ^(.*)$ www.softwhy.com/$1 [R=301]
|
代码解析如下:
(1).RewriteCond用来规定执行后面重写的条件。
(2).%{http_host}是一个服务器变量,可以获取访问的域名,如果域名是"softwhy.com",添加成立。
(3).RewriteRule规定当RewriteCond条件成立索要执行的重写规则。
(4).^(.*)$获取URL除去协议、域名和查询字符串部分,比如softwhy.com/forum.php?mod=viewthread&tid=1,只获取forum.php部分,域名和查询部分不会被获取,如果要获取可以参阅RewriteRule QSA用法一章节。
(5).$1表示^(.*)$小括号所匹配的内容,$2表示第二个小括号所匹配的内容,以此类推。
(6).[R=301]表示原始网址重定向为后来重写的网址。
(7).用softwhy.com/forum.php?mod=viewthread&tid=1访问,softwhy.com/forum.php被www.softwhy.com/forum.php替换,最终是以www.softwhy.com/forum.php?mod=viewthread&tid=1访问页面。
1
2
|
RewriteCond %{HTTP_HOST} ^(.+)\.google\.com$
RewriteRule ^/([\w]+)/([\d]+)$ /service/detail \.html\? id =$1& date =$2&c=%1 [L]
|
代码分析如下:
(1).%{HTTP_HOST}获取域名。
(2).^(.+)\.google\.com$表示任何以google.com为根域名的域名。
(3).^/([\w]+)/([\d]+)$获取访问url两个斜线之间的部分,比如a/b/x.php,那么将会获取a/b。
(4).$1获取^/([\w]+)/([\d]+)$第一个小括号匹配的内容。
(5).$2获取^/([\w]+)/([\d]+)$第二个小括号匹配的内容。
(6).%1获取^(.+)\.google\.com$第一个小括号匹配的内容。
1
|
RewriteRule forum.php?mod=viewthread&tid=100 article-2094-1.html [R=301]
|
本意是,链接(www.)softwhy.comforum.php?mod=viewthread&tid=100跳转到(www.)softwhy.article-2094-1.html,但是结果却非常让人失望,最后结果如下:
1
|
(www.)softwhy.article-2094-1.html??mod=viewthread&tid=100
|
如果Substitution没有查询字符串部分,那么它附加原来URL查询字符串部分。
代码修改如下:
1
|
RewriteRule forum.php?mod=viewthread&tid=100 article-2094-1.html? [R=301]
|
再后面添加一个问号即可。
转载于:https://www.cnblogs.com/my2018/p/10675976.html
RewriteCond与RewriteRule用法相关推荐
- 全面理解.htaccess语法中RewriteCond和RewriteRule意义
全面理解.htaccess语法中RewriteCond和RewriteRule意义 .htaccess 配置文件可以通过RewriteCond 和 RewriteRule 实现伪静态. Rewrite ...
- Apache的URL地址重写 RewriteCond与RewriteRule
Apache的URL地址重写 http://hi.baidu.com/sonan/blog/item/c408963d89468208bba16716.html 第一种方法:Apache环境中如果要将 ...
- Apache的URL地址重写(RewriteCond与RewriteRule)
Apache的URL地址重写 http://hi.baidu.com/sonan/blog/item/c408963d89468208bba16716.html 第一种方法:Apache环境中如果要将 ...
- PHP RewriteRule用法
Apache的URL地址重写 http://hi.baidu.com/sonan/blog/item/c408963d89468208bba16716.html 第一种方法:Apache环境中如果要将 ...
- RewriteCond 和RewriteRule
Apache的Mod_rewrite学习 (RewriteCond重写规则的条件)收藏 RewriteCond Syntax: RewriteCond TestString CondPattern [ ...
- RewriteCond 和RewriteRule
Apache的Mod_rewrite学习 (RewriteCond重写规则的条件)收藏 RewriteCond Syntax: RewriteCond TestString CondPattern [ ...
- URL重写:RewriteCond指令与RewriteRule 指令格式(转)
Rewirte主要的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等.本文将针对mod_rewrite和URL匹配的技术细 ...
- URL重写:RewriteCond指令与RewriteRule 指令格式
Rewirte主要的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等.本文将针对mod_rewrite和URL匹配的技术细 ...
- Apache中RewriteRule和RewriteCond规则参数的详细介绍
RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始.基础的功能,为了方 ...
最新文章
- 重磅!我国建成首个自动驾驶封闭高速公路测试环境
- Hbase 学习(六) 配置文件调优
- optee中的中断处理详解
- mysql组合索引的命中情况
- Adobe 中国区 "Adobe RIA 开发工程师认证考试" 正式发布
- 2014 计算机网络 考研真题,2014计算机网络考研试题过关必练
- DB2的ErrorCode
- php 中访问常量,php 中的常量
- w3cschool php下载_w3cschool下载_W3Cschool v2.0离线版
- Java 编程(基础面试题)
- 华为手机使用HiSuite升级和降级刷机方法
- 唐峻:互联网内容产业永远有机会
- 如何屏幕高清录像?--QVE屏幕录制
- 其实装修也是工程管理
- systools ssd data recovery怎么用呢
- 申请支付宝-Alipay 密钥流程
- python字典一键多值如何遍历_[宜配屋]听图阁
- android自动拨号112,自动拨号打电话助手
- (五)深入理解蓝牙BLE之“Beacon包格式详解”
- 迪文串口屏(T5L2 DGUS II)开发 -- 入门