RewriteCond与RewriteRule用法

Rewrite重写任务基本上都是由RewriteCond和RewriteRule两个命令配合完成。

首先看一段简单代码:

[Shell] 纯文本查看 复制代码


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,比如:

[Shell] 纯文本查看 复制代码


1

2

3

softwhy.com/article-451-1.html

# 跳转到如下链接

www.softwhy.com/article-451-1.html

一.RewriteCond命令:

它用来定义重写规则执行的条件。

语法结构:

[Shell] 纯文本查看 复制代码


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条件满足时要执行的规则。

语法结构:

[Shell] 纯文本查看 复制代码


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:此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。

代码实例:

[Shell] 纯文本查看 复制代码


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访问页面。

[Shell] 纯文本查看 复制代码


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$第一个小括号匹配的内容。

[Shell] 纯文本查看 复制代码


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,但是结果却非常让人失望,最后结果如下:

[Shell] 纯文本查看 复制代码


1

(www.)softwhy.article-2094-1.html??mod=viewthread&tid=100

如果Substitution没有查询字符串部分,那么它附加原来URL查询字符串部分。

代码修改如下:

[Shell] 纯文本查看 复制代码


1

RewriteRule forum.php?mod=viewthread&tid=100 article-2094-1.html? [R=301]

再后面添加一个问号即可。

原文地址:https://www.cnblogs.com/my2018/p/10675976.html

时间: 2024-10-05 22:07:27

RewriteCond与RewriteRule用法的相关文章

转: 全面理解.htaccess语法中RewriteCond和RewriteRule意义

关于.htaccess伪静态的使用,章郎虫一直没有好好想过.以前一直是在网上找现成的,然后修改下网址实现重定向.今天我专门找资料看了下RewriteCond和RewriteRule的意思及使用方法.然后回过头看<网站地址更改之htaccess和php的301重定向>这篇文章,终于有些理解.现在不用一直找现成的代码,也可以自己写一些规则实现重定向了.下面就简单的介绍下他们的用法. RewriteCond的语法 RewriteCond TestString CondPattern [Flags]其

&nbsp; RewriteCond 和 RewriteRule的区别

RewriteCond有点类似于C语言的if.也就是条件判断. RewriteCond 的语法: RewriteCond  测试的字符串   CondPattern[flags] RewriteCond指令定义一条规则条件.在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令,只有当自身的匹配模式(pattern)匹配成功且这些条件也满足时规则才被应用于当前的URL处理. 测试字符串 测试字符串,除了包含普通的字符外,还可以包括下列的可扩展结构: 1,$N Rewri

.htaccess语法中RewriteCond和RewriteRule意义

如果 xxx 匹配ooo 并且 如果 xxx2 匹配ooo 并且 那么 xxx3的访问 应该变为 xxx4 举个例子: RewriteCond %{REQUEST_URI} ^.*$ RewriteCond %{REQUEST_URI} ^/(?!pic).*$ RewriteRule ^(.*)$ /frontend/web/$1 代码解释: 如果 字符串 %{REQUEST_URI} 是 除 "\n"以外的字符开头,并且出现零次或多次,并且除 "\n"以外的字符

RewriteCond 和RewriteRule规则说明 (转)

Apache的Mod_rewrite学习 (RewriteCond重写规则的条件)收藏RewriteCond Syntax: RewriteCond TestString CondPattern [flags] RewriteCond指令定义一条规则条件.在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令,只有当自身的模 板(pattern)匹配成功且这些条件也满足时规则才被应用于当前URL处理. TestString是一个字符串,除了包含普通的字符外,还可以包括下

URL重写:RewriteCond指令与RewriteRule 指令格式

Rewirte基本的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正則表達式规范.平时帮助我们实现拟静态,拟文件夹,域名跳转,防止盗链等.本文将针对mod_rewrite和URL匹配的技术细节,以及RewriteCond与RewriteRule 指令格式进行探讨. Rewirte模块内部处理 Rewirte模块的内部处理极为复杂,可是为了使一般用户避免犯低级错误.也让管理员能充分利用其功能.在此仍然做一下说明. Rewirte模块API阶段 首先,你必须了解Apache是分若干阶段来

apache RewriteCond RewriteRule

http://www.rockbb.com/blog/?p=319 http://www.cnblogs.com/scgw/archive/2011/12/10/2283029.html 我的理解:当浏览器发送一个请求到服务器请求一个资源的时候,比如 http://localhost/user/13 ,我们的web服务器---这里是Apache服务器,接收到这个请求,就会去判断 这个资源在我们的服务器上到底有没有.但在这之前呢,我们的 Apache 可以对这个请求的URL 进行一个转换 http

实用 .htaccess 用法大全

这里收集的是各种实用的 .htaccess 代码片段,你能想到的用法几乎全在这里. 免责声明: 虽然将这些代码片段直接拷贝到你的 .htaccess 文件里,绝大多数情况下都是好用的,但也有极个别情况需要你修改某些地方才行.风险自负. 重要提示: Apache 2.4 有不兼容的修改,特别是在访问配置控制方面.详细信息请参考这篇更新文档以及这篇文章. 重新和重定向 注意:首先需要服务器安装和启用mod_rewrite模块. 强制 www RewriteEngine on RewriteCond 

转:实用 .htaccess 用法大全

原文来自于:http://www.techug.com/htaccess-snippets 这里收集的是各种实用的 .htaccess 代码片段,你能想到的用法几乎全在这里. 免责声明: 虽然将这些代码片段直接拷贝到你的 .htaccess 文件里,绝大多数情况下都是好用的,但也有极个别情况需要你修改某些地方才行.风险自负. 重要提示: Apache 2.4 有不兼容的修改,特别是在访问配置控制方面.详细信息请参考这篇更新文档以及这篇文章. 目录 重新和重定向 强制 www 强制 www通用方法

实用 .htaccess 用法大全【转载】

转载:http://www.techug.com/htaccess-snippets 这里收集的是各种实用的 .htaccess 代码片段,你能想到的用法几乎全在这里. 免责声明: 虽然将这些代码片段直接拷贝到你的 .htaccess 文件里,绝大多数情况下都是好用的,但也有极个别情况需要你修改某些地方才行.风险自负. 重要提示: Apache 2.4 有不兼容的修改,特别是在访问配置控制方面.详细信息请参考这篇更新文档以及这篇文章. 目录 重新和重定向 强制 www 强制 www通用方法 强制