apache重写规则详解
RewriteEngine on
为重写引擎开关,如果设为off,则任何重写规则定义将不被应用,该开关的另一好处就是如果为了临时拿掉重写规则,则改为off再重启动Apache即可,不必将下面一条条的重写规则注释掉。
RewriteCond 条件重写规则,当满足后面定义的条件后才会应用下面的重写规则。
RewriteCond 的语法如下:
RewriteCond TestString CondPattern [flags]
TestString
TestString 是一个纯文本的字符串,但是也可以包含一些扩展的成分,这里就是通过 %{NAME_OF_VARIABLE} 引用的服务器变量。
服务器变量:
REQUEST_FILENAME 是与请求相匹配的完整的本地文件系统的文件路径名。
REQUEST_URI 是在HTTP请求行中所请求的资源(比如:"/index.html")。
CondPattern
CondPattern是条件模式,即一个应用于当前TestString实例的正则表达式。TestString将被首先计算,然后再与CondPattern匹配。
比如: RewriteCond %{REQUEST_URI} !=/favicon.ico 的意思就是请求的地址不是 /favicon.ico 才触发下面的地址重写;
! (惊叹号)来指定不匹配。
'-d'(目录) 将TestString视为一个路径名并测试它是否为一个存在的目录。
'-f'(常规文件) 将TestString视为一个路径名并测试它是否为一个存在的常规文件。
所以: RewriteCond %{REQUEST_FILENAME} !-f 的意思为, 请求的文件并不存在时触发后面的地址重写;
RewriteCond %{REQUEST_FILENAME} !-d 的意思为: 请求的目录并不存在时,触发后面的地址重写;
更多这个参数的写法可以参看: http://www.52web.com/52article/?view-258.html
[flags]
我们还可以在CondPattern之后追加特殊的标记[flags]作为RewriteCond指令的第三个参数。flags是一个以逗号分隔的以下标记的列表:
'nocase|NC'(忽略大小写)
它使测试忽略大小写,扩展后的TestString和CondPattern中'A-Z' 和'a-z'是没有区别的。此标记仅用于TestString和CondPattern的比较,而对文件系统和子请求的检查不起作用。
'ornext|OR'(或下一条件)
它以OR方式组合若干规则的条件,而不是隐含的AND。典型的例子如下:
RewriteRule 具体的重写策略:
RewriteRule的语法如后: RewriteRule Pattern Substitution [flags]
Pattern
对Apache1.2及以后的版本,模板(Pattern)是一个POSIX正则式,用以匹配当前的URL。当前的URL不一定是最初提交的URL,因为可能用一些规则在此规则前已经对URL进行了处理。
这里是 ^(.*)$ ,意味着一行任何的地址请求;
Substitution
当匹配成功后,Substitution会被用来替换相应的匹配。
这里的 RewriteRule ^(.*)$ index.php?q=$1 意味着, 如果原先请求的是 /aaa/ddd 重写后地址变成 index.php?q=/aaa/ddd ;
它除了可以是普通的字符串以外,还可以包括:
1. $N,引用RewriteRule模板中匹配的相关字串,N表示序号,N=0..9
2. %N,引用最后一个RewriteCond模板中匹配的数据,N表示序号
3. %{VARNAME},服务器变量
4. ${mapname:key|default},映射函数调用。
更多信息可以参看:http://www.ixdba.net/article/ae/1443.html
[flags]
作为RewriteRule指令的第三个参数。 Flags是一个包含以逗号分隔的标记的列表。
这里的 L,QSA 分别是如下意思:
'last|L' (最后一个规则 last)
立即停止重写操作,并不再应用其他重写规则。 它对应于Perl中的last命令或C语言中的break命令。
这个标记可以阻止当前已被重写的URL为其后继的规则所重写。 举例,使用它可以重写根路径的URL('/')为实际存在的URL, 比如,
'/e/www/'.
'qsappend|QSA' (追加请求串 query string append)
此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。 如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。
比如说我要把 /user/ghj1976 重定向到/user.php?uid=ghj1976 那么我的规则就须这样:
RewriteRule ^user/([^/]+)$ ^/user.php?uid=$2 [L]
但是如果我们希望 /user/ghj1976?key=java 重定向到 /user.php?uid=ghj1976&key=java
写成 RewriteRule ^user/([^/]+)$ ^/user.php?uid=$2 [QSA,L] 这样增加个 QSA 就可以了。
如果没有QSA,就会丢掉我们额外传的这个参数key=java。
apache重写规则详解的更多相关文章
- (原创)LAMP搭建之二:apache配置文件详解(中英文对照版)
LAMP搭建之二:apache配置文件详解(中英文对照版) # This is the main Apache server configuration file. It contains the # ...
- 转: Apache SSI详解及应用
转: Apache SSI详解及应用 什么是 SSI? SSI(Server Side Includes),是嵌套在 HTML 网页中的指示语句,由后台服务器进行代码的解释计算.使用 SSI 可以动态 ...
- apache配置文件详解与优化
apache配置文件详解与优化 一.总结 一句话总结:结合apache配置文件中的英文说明和配置详解一起看 1.apache模块配置用的什么标签? IfModule 例如: <IfModule ...
- Web性能压力测试工具之Apache AB 详解
下载安装地址: http://httpd.apache.org/download.cgi yum install httpd-tools http://www.apachelounge.com/dow ...
- apache配置详解
可参考:Apache 的 httpd.conf 详解 ServerTokens OS 此指令控制了Server回送给客户端的回应头域是否包含关于服务器OS类型和编译进的模块描述信息.服务器会发送:Se ...
- Apache日志详解
在渗透测试的工作中,WEB网站的日志是非常重要的,今天总结了一些关于调配Apache日志的一些东西. 0x00 Apache日志文件名称及路径介绍 我们安装好Apache后,Apache的配置文件(h ...
- .htaccess中Apache配置详解
1.<IfDefine> 指令 说明 封装一组只有在启动时当测试结果为真时才生效的指令 语法 <IfDefine [!]parameter-name> ... </IfD ...
- yum方式安装的Apache目录详解和配置说明
在对httpd.conf文件进行解读之前,首先了解一下Redhat9中Apache服务器默认配置的一些基本信息:配置文件:/etc/httpd/conf/http.conf1)"/etc/h ...
- linux下的apache配置文件详解
.Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改. 站点的配置(基本配置) (1) 基本配置: ServerRoot "/mnt/s ...
随机推荐
- 机器学习(七)—Adaboost 和 梯度提升树GBDT
1.Adaboost算法原理,优缺点: 理论上任何学习器都可以用于Adaboost.但一般来说,使用最广泛的Adaboost弱学习器是决策树和神经网络.对于决策树,Adaboost分类用了CART分类 ...
- poj3694 边-双连通分量+lca
题意:先给了一张无向图,然后依次加边,每次求桥的数量 题解:先用一次tarjan,我们可以标记桥的位置和记录桥的数量同时记录fa数组,然后更新边的时候我们可以用lca,因为在tarjan缩点之后得到了 ...
- jdbc connection为什么放在webINF的lib里面
jdbc connection为什么放在webINF的lib里面
- hdoj-1276-士兵队列训练问题(队列模拟)
题意: 新兵蛋子按照两种报数规则报数: 1.1212报数,2出队 2.123123报数,3出队 没报完一轮,检查人数,不大于3,over 略坑,必须每报完一轮检查人数,最初,按照12两种顺序报完检查人 ...
- python lambda 用途
可以让一个带参数函数,传递并以无参调用 def test(a): print a a=test # #a() a=897987 fun=lambda : test(a) fun()
- itext生成pdf(附带页眉,页脚,页码)
package cn.picclife.mwx.salesupport.marketactivity.util; import java.io.File; import java.io.FileOut ...
- LeetCode 361. Bomb Enemy
原题链接在这里:https://leetcode.com/problems/bomb-enemy/description/ 题目: Given a 2D grid, each cell is eith ...
- BZOJ3075,LG3082 [USACO13MAR]项链Necklace
题意 Bessie the cow has arranged a string of N rocks, each containing a single letter of the alphabet, ...
- POJ1456:Supermarket(并查集版)
浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:http://poj.org/problem?id=1456 堆作法:https:/ ...
- Linux基础命令-echo
echo命令 功能:显示字符 (末尾自带换行功能) 语法:echo [-neE][字符串] 说明:echo会将输入的字符串送往标准输出.输出的字符串间以空白字符隔开, 并在最后加上换行号 -n 不在字 ...