Rewritecond介绍[通俗易懂]

Rewritecond介绍[通俗易懂]RewriteCondSyntax:RewriteCondTestStringCondPattern[flags]  RewriteCond指令定义一条规则条件。在一条RewriteRule指令前面可能会有一条或多条RewriteCond指令,只有当自身的模板(pattern)匹配成功且这些条件也满足时规则才被应用于当前URL处理。  TestString是一个字符串,除了包含普通的

大家好,又见面了,我是你们的朋友全栈君。

RewriteCond
Syntax: RewriteCond TestString CondPattern [flags]
  
RewriteCond
指令定义一条规则条件。在一条
RewriteRule
指令前面可能会有一条或多条
RewriteCond
指令,只有当自身的模板
(pattern)
匹配成功且这些条件也满足时规则才被应用于当前
URL
处理。

  
TestString
是一个字符串,除了包含普通的字符外,还可以包括下列的可扩展结构:
1.      
$N,RewriteRule
后向引用,其中
(0 <= N <= 9)
  
$N
引用紧跟在
RewriteCond
后面的
RewriteRule
中模板中的括号中的模板在当前
URL
中匹配的数据。
2.      
%N,RewriteCond
后向引用,其中
(0 <= N <= 9)
  
%N
引用最后一个
RewriteCond
的模板中的括号中的模板在当前
URL
中匹配的数据。

3.       ${mapname:key|default},RewriteMap扩展. 具体参见RewriteMap

4,5详见附录

6.       特别说明:

o       
SCRIPT_FILENAME

REQUEST_FILENAME
变量含有相同的值,也就是
Apache
服务器内部数据结构
request_rec

filename
字段的值。第一个变量是一个
CGI
变量,而第二个则与
REQUEST_URI(
含有
request_rec
数据结构中
uri
字段的值
)
保持一致。
o       
%{ENV:variable}
中的
variable
可以是任何环境变量的名字。对其值的查找,先通过
Apache
内部的数据结构,(如找不到)再在
Apache
服务器进程中通过
getenv()
查找。
o       
%{HTTP:header}
中的
header
可以是任何
HTTP MIME-header
的名字,其值通过查找
HTTP
请求信息而得。
o       
%{LA-U:variable}
用来引用后续
API
阶段中定义的、当前还不知道的值,具体实现是通过执行一个基于
URL
的内部的
sub-request
来决定的
variable
的最终的值。例如,假如你想在服务器范围内利用
REMOTE_USER
的值来完成重写,但这个值是在验证阶段设置的,而验证阶段是在
URL
转换阶段的后面。从另一方面讲,由于
mod_rewrite
在修补
(fixup)API
阶段进行目录范围的重写,而修补阶段在验证阶段的后面,所以此时只要用
%{REMOTE_USER}
就可以取得该值了。
o       
%{LA-F:variable}
,执行一个基于文件名字
(filename)
的内部
sub-request
来决定
variable
的最终的值。大多数时间内,这和
LA-U
相同。
  
CondPattern
是一个条件模板,也就是说,是一个扩展正则式(
extended regular expression
),用与跟
TestString
进行匹配。作为一个标准的扩展正则式,
CondPattern
有以下补充:
1.      
可以在模板串前增加一个
!
前缀,以用表示不匹配模板。但并不是所有的
test
都可以加!前缀。
2.      
CondPattern
中可以使用以下特殊变量:
o       
‘<CONDPATTERN’ (
小于,基于字母顺序
)

condPattern
当作一个普通字符串,将它和
TestString
进行比较,当
TestString
的字符小于
CondPattern
为真
.
o       
‘>CondPattern’ (
大于
)

condPattern
当作一个普通字符串,将它和
TestString
进行比较,当
TestString
的字符大于
CondPattern
为真
.
o       
‘=CondPattern’ (
等于
)

condPattern
当作一个普通字符串,将它和
TestString
进行比较,当
TestString

CondPattern
完全相同时为真
.
如果
CondPattern
只是
“” (
两个引号紧挨在一起
)
此时需
TestString
为空字符串方为真
.
o       
‘-d’ (
是否为目录
)

testString
当作一个目录名,检查它是否存在以及是否是一个目录
.
o       
‘-f’ (
是否是
regular file)

testString
当作一个文件名,检查它是否存在以及是否是一个
regular
文件
.
o       
‘-s’ (
是否为长度不为
0

regular
文件
)

testString
当作一个文件名,检查它是否存在以及是否是一个长度大于
0

regular
文件
o       
‘-l’ (
是否为
symbolic link)

testString
当作一个文件名,检查它是否存在以及是否是一个
symbolic link.
o       
‘-F’ (
通过
subrequest
来检查某文件是否可访问
)
检查
TestString
是否是一个合法的文件,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部
subrequest
完成的
,
因此需要小心使用这个功能以降低服务器的性能。
o       
‘-U’ (
通过
subrequest
来检查某个
URL
是否存在
)
检查
TestString
是否是一个合法的
URL
,而且通过服务器范围内的当前设置的访问控制进行访问。这个检查是通过一个内部
subrequest
完成的
,
因此需要小心使用这个功能以降低服务器的性能。
  
[flags]
是第三个参数,多个标志之间用逗号分隔。
1.      
‘nocase|NC’ (
不区分大小写
)
  在扩展后的
TestString

CondPattern
中,比较时不区分文本的大小写。注意,这个标志对文件系统和
subrequest
检查没有影响
.
2.      
‘ornext|OR’ (
建立与下一个条件的或的关系
)
  默认的情况下,二个条件之间是
AND
的关系,用这个标志将关系改为
OR
。例如:
RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR] RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule …
如果没有
[OR]
标志,需要写三个条件
/
规则
.
例子:根据客户端浏览器的不同,返回不同的首页面。
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteRule ^/$ /homepage.max.html [L] RewriteCond %{HTTP_USER_AGENT} ^Lynx.* RewriteRule ^/$ /homepage.min.html [L] RewriteRule ^/$ /homepage.std.html [L]

当你在地址栏里输入 sina.com.cn google.cn

看看有什么变化?是不是会自动跳转到 www.sina.com.cn   www.google.cn

这一技术通过apache的rewrite可以实现,当然你得把 不带www的域名指向你服务器的IP

要是虚拟主机的话,得在viralhost段加入 ServerAlias xxx.com

然后打开重写引擎功能

RewriteEngine On

能过rewritecond判断主机名是否带www

RewriteCond %{HTTP_HOST} ^xxx/.com$ [NC]

然后来一条

RewriteRule ^/(.*)$ http://www.xxx.com/$1 [R=301,L]

OK,重起apache,现在在浏览器中输入 xxx.com 看看是不是自动变成了www.xxx.com了呢。

重新整理一下就是:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^xxx/.com$ [NC]

RewriteRule ^/(.*)$ http://www.xxx.com/$1 [R=301,L]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130719.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月13日 下午4:16
下一篇 2022年6月13日 下午4:36


相关推荐

  • excel转json (树状结构)

    excel转json (树状结构)json 转换成树状结构

    2026年3月17日
    3
  • 流行计算机病毒有哪些,现在流行计算机病毒有哪些[通俗易懂]

    流行计算机病毒有哪些,现在流行计算机病毒有哪些[通俗易懂]现在流行计算机病毒有哪些现在流行计算机病毒有哪些现在流行的计算机病毒有很多!你有去了解过吗?下面由小编给你做出详细的现在流行计算机病毒介绍!希望对你有帮助!现在流行计算机病毒介绍一:国家计算机病毒应急处理中心通过对互联网的监测发现,近期出现一种恶意后门程序变种Backdoor_Agent.ADG。该变种运行后,会自我复制到受感染操作系统指定文件夹下,重命名为可执行文件。随后,该变种会释放操作系统中…

    2022年5月5日
    67
  • 免费的几个CDN加速

    免费的几个CDN加速总结一下国内外几个好不错的 CDN 网站加速服务 可能会有一些熟知的在里面 IncapsulaCDN 网站加速服务 Incapsula 是美国一家专门提供 CDN 服务的网站 虽不是最早提供 CDN 服务的商家 国内一家站长想要选择国外的 CDN 服务的话 Incaosula 依然是首选 Incapsula 提供免费的 CDN 服务 默认的免费 CDN 没有流量限制 只是与付费的 CDN 在 ddos 网页优化加载等方面存在区别 最重要的 Inca

    2026年3月17日
    3
  • 半监督之mixmatch

    半监督之mixmatch自洽正则化:以前遇到标记数据太少,监督学习泛化能力差的时候,人们一般进行训练数据增广,比如对图像做随机平移,缩放,旋转,扭曲,剪切,改变亮度,饱和度,加噪声等。数据增广能产生无数的修改过的新图像,扩大训练数据集。自洽正则化的思路是,对未标记数据进行数据增广,产生的新数据输入分类器,预测结果应保持自洽。即同一个数据增广产生的样本,模型预测结果应保持一致。此规则被加入到损失函数中,有如下形式,其中x是未标记数据,Augment(x)表示对x做随机增广产生的新数据,θ是模型参数,y是模型预测结.

    2025年8月9日
    3
  • 11 如何通过 “副本传输” 传输从DEV到QAS的请求号

    11 如何通过 “副本传输” 传输从DEV到QAS的请求号业务背景:在实际项目中,当顾问在DEV配置系统中做好配置,或者开发顾问在DEV开发系统中做好了开发,生成了请求号后,需要将对应的配置传输到QAS系统(集成测试系统),要想将请求号对应的配置或开发内容从DEV系统传输到QAS系统。常规操作就是需要将请求号进行释放后,在进行传输,但是在实际情况下,很多时候顾问的配置或开发内容并未全部完成或还需要进行局部修改的情况下,副本传输就可以解决既可以不释放请求号,又可以达到跨服务器传输请求号内容的目的了。PS:请求号一旦释放后,就不能再使用同一个请求号进行配置和

    2022年6月28日
    37
  • 常用加密方式

    常用加密方式<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8&quo

    2022年7月3日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号