Apache:详解QSA,PT,L,E参数的作用
[QSA]
当被替换的URI包含有query string的时候,apache的默认行为是,丢弃原有的query string 并直接使用新产生的query string,如果加上了[QSA]选项,那么旧的query string 将会与新产生的query string组合起来,产生一个新的query string
Demo:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
当访问:/pages/123?one=two
会重写成: /page.php?page=123&one=two
如果不用[QSA]
会重写成:/page.php?page=123
[PT]
在RewriteRule中的目标串(被替换完的路径)都会被看做是文件路径,使用[PT]选项能够让apache将其看作是URI来对待。这也就是说,使用了[PT]选项,能够使得RewriteRule的结果重新加入到URL的匹配当中去,让那些基于本地匹配的,例如Alias, Redirect, or ScriptAlias,能够有生效的机会。
Demo:
Alias "/icons" "/usr/local/apache/icons"
RewriteRule "/pics/(.+)\.jpg$" "/icons/$1.gif" [PT]
如果你有一个Alias给/icons,并且有一个RewriteRule,那么你需要使用[PT]选项来确保Alias会被计算到
如果漏了[PT]选项,那么会导致报出 'File not found' 的错误
[L]
[L]能够使得mod_rewrite 停止处理规则集。在众多contexts中,这意味着,一旦规则匹配了,就没有后续规则会被处理。这相当于Perl的last命令,或者C的break命令。使用这个flag去指示当前规则应该立即应用,不用管后续的规则!
如果你也使用了RewriteRule在 .htaccess 或者在 <Directory> 中那么理解规则的处理过程是非常重要的。简单来说,一旦规则被处理,就会发起一个重写请求给URL解析引擎去重新处理这个url(译者注:就是重写的结果)。当这个重写请求被处理的时候,.htaccess 和 <Directory>就会被重新收集,因此规则集就会重新匹配。通常来说,如果一个规则导致重定向到-,无论是内部重定向还是外部重定向,都会让请求过程重新开始。
也是因为这个原因,如果你使用 RewriteRule 指令在某个context中,那么你要非常注意,防止闭环规则。并且不要单单关注有[L]flag那个结束执行一系列规则的那一条,还要理解整个流程。
有个可选的flag,[END],能够结束不单单是当前这一round的重写过程,还能阻止后续的重写过程。
Demo:
RewriteBase "/"
RewriteCond "%{REQUEST_URI}" "!=/index.php"
RewriteRule "^(.*)" "/index.php?req=$1" [L,PT]
上面的demo会重写所有请求到index.php,将原始请求作为一个query string参数给index.php,利用RewriteCond来确保如果当前请求已经是到index.php的,那么就跳过
RewriteRule。
[E]
通过[E],或者[env] flag,你可以设置环境变量。记住,有一些环境变量会在规则运行之后被设置,因此有可能会覆盖掉你设置的值。查看 the Environment Variables document 这个文档能够知道更多环境变量的运作。
完整的语法如下:
[E=VAR:VAL]
[E=!VAR]
Demo:
RewriteRule "\.(png|gif|jpg)$" "-" [E=image:1]
CustomLog "logs/access_log" combined env=!image
参考链接:http://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_l
---------------------
作者:xiaolu289
来源:CSDN
原文:https://blog.csdn.net/xiaolu289/article/details/79416128
版权声明:本文为博主原创文章,转载请附上博文链接!
Apache:详解QSA,PT,L,E参数的作用的更多相关文章
- 企业级Apache详解
安装Apache #Apache安装 rpm -qa|grep httpd yum install httpd #2编译安装: -->推荐安装 cd /root/software yum -y ...
- RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 是什么意思?
<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENA ...
- Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)【转】
转自:https://blog.csdn.net/radianceblau/article/details/74722395 版权声明:本文为博主原创文章,未经博主允许不得转载.如本文对您有帮助,欢迎 ...
- Java虚拟机详解(五)------JVM参数(持续更新)
JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况.但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的.下面我们就来对 ...
- Linux /dev目录详解和Linux系统各个目录的作用
Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...
- linux下安装apache详解
下载httpd-2.2.6.tar.bz2 把httpd-2.2.6.tar.bz2放到/soft 下[root@localhost ~]#cd /soft[root@localhost soft] ...
- 企业级Apache详解2
http_conf主配置说明 root@lamp01 apache]# grep -Ev "#|^$" conf/httpd.conf DocumentRoot "/us ...
- Java虚拟机详解03----常用JVM配置参数
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- linux下手动安装apache详解
引自:http://blog.chinaunix.net/uid-28458801-id-4211258.html error1:出现以下错误时候,需要下载安装apr configure: error ...
随机推荐
- socketserver实现FTP
功能: 1.用户加密认证 2.允许同时多用户登录 3.每个用户有自己的家目录 ,且只能访问自己的家目录 4.对用户进行磁盘配额,每个用户的可用空间不同 5.允许用户在ftp server上随意切换目录 ...
- RxSwift学习笔记8:filter/distinctUntilChanged/single/elementAt/ignoreElements/take/takeLast/skip/sample/debounce
//filter:该操作符就是用来过滤掉某些不符合要求的事件. Observable.of(1,2,3,4,5,8).filter({ $0 % 2 == 0 }).subscribe { (even ...
- 说说xgboost算法
xgboost算法最近真是越来越火,趁着这个浪头,我们在最近一次的精准营销活动中,也使用了xgboost算法对某产品签约行为进行预测和营销,取得了不错的效果.说到xgboost,不得不说它的两大优势, ...
- 迁移桌面程序到MS Store(5)——.NET Standard
接下来的几篇,我想讨论下迁移桌面程序到MS Store,可以采用的比较常见.通用性比较强的实施步骤和分层架构. 通常商业项目一般都是不断的迭代,不太可能突然停止更新现有的桌面版本,然后花很长时间从头来 ...
- document.domain实现不同域名跨域
利用document.domain 实现跨域:前提条件:这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域. 两个子域名:aaa.xxx ...
- Android 经验之文件下载
在Android 开发中,我们肯定会接触到下载需求,那么如何通过技术实现呢? 一.简单实现: 通过了解HTTP原理,我们应该可以知道,HTTP学习的时候,可以通过HTTPGET方式来进行文件下载: n ...
- 9.indicate、xutils、json
json数据 页签详情页数据 public class TabData { public int retcode; public TabDetail data;//不是数组的话类型就是这个 pu ...
- 使用js做LeetCode
概述 无意中得知了LeetCode这个刷题网站, 深得我意. 其实作为一个程序员, 我是很看重写基础代码的, 因为这个写熟了, 以后学各种语言就不会太困难. 所以我觉得有必要把这件事记下来, 供以后开 ...
- .net core通过发布nuget实现引用项目
1 获取 api key 登录 https://www.nuget.org/account 进行api key获取操作 2 安装 nuget package explorer 3 进入要发布的项目目 ...
- kubernetes构建时容器的时间与宿主机不一致的解决方法
kubernetes默认使用docker容器部署的应用,会出现时间与主机不一致的情况 容器时间与主机差8个小时:主机的与容器的/etc/localtime不一致 解决方法:挂载主机的/etc/loca ...