Loading [MathJax]/jax/input/TeX/jax.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Rewritecond介绍

Rewritecond介绍

作者头像
全栈程序员站长
发布于 2022-07-01 10:48:38
发布于 2022-07-01 10:48:38
8670
举报

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

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.cn/130721.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Apache的URL地址重写(RewriteCond与RewriteRule)
大家好,又见面了,我是你们的朋友全栈君。Apache的URL地址重写 http://hi.baidu.com/sonan/blog/item/c408963d89468208bba16716.html 第一种方法:Apache环境中如果要将URL地址重写,正则表达式是最基本的要求,但对于一般的URL地址来说,基本的匹配就能实现我们大部分要求,因此除非 是非常特殊的URL地址,但这不是我要讨论的范围,简单几招学会Apache中URL地址重写,通过实例展示,轻松学会URL地址重写: URL实例
全栈程序员站长
2022/06/30
2.9K0
RewriteCond指令格式
语法: RewriteCond TestString CondPattern [flags]
全栈程序员站长
2022/07/01
2.8K0
通过URL Rewrite来设置JBoss的301跳转
The rewrite valve implements URL rewrite functionnality in a way that is very similar to mod_rewrite from Apache HTTP Server.
EltonZheng
2021/01/26
3.9K0
Apache中 RewriteCond 规则参数介绍[通俗易懂]
Apache中 RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结果,这次我终于算大概知道它的意思了。 RewriteCond就像我们程序中的if语句一样,表示
全栈程序员站长
2022/06/29
5.2K0
Apache URL重写规则
  Apached的重写功能,即是mod_rewrite模块功能,它是apache的一个模块。它的功能非常强大,可以操作URL中的所有部分。
那一叶随风
2018/08/22
3.7K0
Apache URL重写规则
Apache重载规则详解[二]
续:Apache重载规则详解[一] 要求2: 很多模板技术mvc中总有index.php(显示在地址栏,看着很不友好,这个怎么重载?) 比如: http://www.0377joyous.com/index.php/list/23/ 重载过后显示 http://www.0377joyous.com/list/23/更利于搜索引擎收录 规则可以这样写(这个是TP上的规则) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENA
苦咖啡
2018/05/07
1.2K0
apache rewritecond_hfile数据格式中的data字段用于
RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。
全栈程序员站长
2022/08/18
4.9K0
Apache rewrite Url
本文主要介绍Apache环境下,如何使用mod_rewrite模块完成URL重写功能。
黄啊码
2020/05/31
2.1K0
重定向和伪静态知识点总结
一、Apache的伪静态配置 1、网站根目录下需要有 .htaccess 文件,没有则自己创建一个,内容如下:&l...
友儿
2022/09/11
2.5K0
Apache之Rewrite和RewriteRule规则梳理以及http强转https的配置总结(完整版)
一. 简单实例介绍 一般来说,apache配置好http和https后,如果想要做http强转到https,需要设置url重定向规则,大致需要下面几个步骤即可完成配置:
洗尽了浮华
2018/09/28
33.4K0
Apache URL重定向
Apached的重写功能,即是mod_rewrite模块功能,它是apache的一个模块。它的功能非常强大,可以操作URL中的所有部分。通过改写url,给用户提供一个简介大方的url,当用户访问时可以通过mod_rewrite模块功能转换为真正的资源路径。通过mod_rewrite能实现的功能还有很多,例如隐藏真实地址、实现URL跳转、域名跳转、防盗链、限制访问资源类型等等。
星哥玩云
2022/09/15
6K0
PHP扩展模块、Apache之rewrite模块
说明: 在配置文件中加入“extension=redis.so”即可!该文件中“;”表示注释符号,同“#”。
阿dai学长
2019/04/03
2.7K0
RewriteCond 详解「建议收藏」
语法: RewriteCond TestString CondPattern
全栈程序员站长
2022/07/01
7260
由浅入深剖析.htaccess
.htaccess的主要作用就是实现url改写,也就是当浏览器通过url访问到服务器某个文件夹时,作为主人,我们可以来接待这个url,具体地怎样接待它,就是此文件的作用。所有的访问都是通过URL实现,所以.htaccess的作用非同小可。正因为此,所以一般地网站通过设置.htaccess,通过一个十分友好的url吸引用户进来,然后用.htaccess把用户带到需要访问的位置。
Java架构师必看
2021/03/22
5.5K0
Apache重载规则详解[一]
1、先写个简单的重载规则(具体环境配置参考 http://www.0377joyous.com/archives/109.html) 2、在网站目录(我在网站根目录下做测试)下建立htaccess文
苦咖啡
2018/05/07
1.2K0
Apache规则RewriteCond详解
Apache中 RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了。
全栈程序员站长
2022/07/01
8610
Apache中 RewriteRule 规则参数介绍
大家好,又见面了,我是你们的朋友全栈君。Apache中 RewriteRule 规则参数介绍
全栈程序员站长
2022/08/27
13.1K0
Apache中的htaccess文件格式简析
学apache 就必须要学下htaccess。这个在网站比较小的情况下看不出来,但是当网站结构复杂的时候,我们就需要对访问进来的域名进行分类处理了,比如构建二级域名、设置301重定向、404禁止访问的显示界面,设置权限、防止盗链等一系列工作,都需要有.htaccess文件的处理。
mythsman
2022/11/14
2.9K0
Apache 的 ReWrite 的应用
Apache的mod_rewrite是提供了强大URL操作的杀手级 的模块,可以实现几乎所有你梦想的URL操作类型,其代价是你必须接受其复杂性,因为mod_rewrite的主要障碍就是初学者不容易理解和运用,即使 是Apache专家有时也会发掘出mod_rewrite的新用途。 换句话说:对mod_rewrite,或者是打退堂鼓永不再用,或者是喜欢它并一生受用。 ReWrite可以应用在以下方面或者解决以下问题: URL的规划 规范的URL 说明: 在有些网站服务器上,一个资源会拥有多个URL,在实
wangxl
2018/03/07
1.6K0
Apache rewrite的重写相关的参数说明
Apache的rewrite的重写非常常用,现总结了一下.Apache mod_rewrite规则重写的标志一览
习惯说一说
2019/07/16
1.3K0
相关推荐
Apache的URL地址重写(RewriteCond与RewriteRule)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档