Apache的Mod_rewrite学习(RewriteCond RewriteRule)

2024-01-14 02:48

本文主要是介绍Apache的Mod_rewrite学习(RewriteCond RewriteRule),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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.       %{ NAME_OF_VARIABLE } , 服务器变量。 变量的名字如下表(分类显示)
HTTP headers:
connection & request:
server internals:
system stuff:
HTTP_USER_AGENT
REMOTE_ADDR
DOCUMENT_ROOT
TIME_YEAR
HTTP_REFERER
REMOTE_HOST
SERVER_ADMIN
TIME_MON
HTTP_COOKIE
REMOTE_USER
SERVER_NAME
TIME_DAY
HTTP_FORWARDED
REMOTE_IDENT
SERVER_ADDR
TIME_HOUR
HTTP_HOST
REQUEST_METHOD
SERVER_PORT
TIME_MIN
HTTP_PROXY_CONNECTION
SCRIPT_FILENAME
SERVER_PROTOCOL
TIME_SEC
HTTP_ACCEPT
PATH_INFO
SERVER_SOFTWARE
TIME_WDAY
QUERY_STRING
TIME
AUTH_TYPE
5.        
specials:
说明
API_VERSION
Apache 与模块间的接口的版本号
THE_REQUEST
客户端发送到来的 HTTP 请求行的整行信息,不含其它的头字段信息,如( "GET /index.html HTTP/1.1")
REQUEST_URI
HTTP 请求行中请求的资源
REQUEST_FILENAME
请求中对应的服务器本地文件系统中全路径文件名
IS_SUBREQ
根据是否为 SubRequest, 分别值为 ”true” ”false”
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]

这篇关于Apache的Mod_rewrite学习(RewriteCond RewriteRule)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/603681

相关文章

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学