[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参数的作用的更多相关文章

  1. 企业级Apache详解

    安装Apache #Apache安装 rpm -qa|grep httpd yum install httpd #2编译安装: -->推荐安装 cd /root/software yum -y ...

  2. RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 是什么意思?

    <IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENA ...

  3. Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)【转】

    转自:https://blog.csdn.net/radianceblau/article/details/74722395 版权声明:本文为博主原创文章,未经博主允许不得转载.如本文对您有帮助,欢迎 ...

  4. Java虚拟机详解(五)------JVM参数(持续更新)

    JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改都可以满足大多数情况.但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的.下面我们就来对 ...

  5. Linux /dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...

  6. linux下安装apache详解

    下载httpd-2.2.6.tar.bz2  把httpd-2.2.6.tar.bz2放到/soft 下[root@localhost ~]#cd /soft[root@localhost soft] ...

  7. 企业级Apache详解2

    http_conf主配置说明 root@lamp01 apache]# grep -Ev "#|^$" conf/httpd.conf DocumentRoot "/us ...

  8. Java虚拟机详解03----常用JVM配置参数

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. linux下手动安装apache详解

    引自:http://blog.chinaunix.net/uid-28458801-id-4211258.html error1:出现以下错误时候,需要下载安装apr configure: error ...

随机推荐

  1. Elastic-search在linux上的安装

    今天是我装第四次 ES ,之前装好用了一段时间,后面莫名其妙爆炸了,炸出一堆异常... 安装环境: JDK1.8   centos    ElasticSearch-6.2.4 jdk1.8以上,所以 ...

  2. Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍

    系统架构分析 Android体系结构 安卓结构有四大层,五个部分,Android分四层为: 应用层(Applications),应用框架层(Application Framework),系统运行层(L ...

  3. 第十节:详细讲解一下Java多线程,随机文件

    前言 大家好,给大家带来第十节:详细讲解一下Java多线程,随机文件的概述,希望你们喜欢 多线程的概念 线程的生命周期 多线程程序的设计 多线程的概念 多线程的概念:程序是静态的,进程是动态的.多进程 ...

  4. JAVA基础语法——标识符、修饰符、关键字(个人整理总结)

    JAVA基础语法——标识符.修饰符.关键字 一 . 标识符 1.1    什么是标识符 就是程序员在定义java程序时,自定义的一些名字,例如helloworld 程序里关键字class 后跟的Dem ...

  5. LeetCode:94_Binary Tree Inorder Traversal | 二叉树中序遍历 | Medium

    题目:Binary Tree Inorder Traversal 二叉树的中序遍历,和前序.中序一样的处理方式,代码见下: struct TreeNode { int val; TreeNode* l ...

  6. Ubuntu18.04 下修改 root密码

    首先打开终端输入命令 sudo passwd root 然后依次是当前用户密码,将要设置root密码,确认root密码.切换root看一下 备注: #符号 是系统用户 root$符号 是你创建的用户 ...

  7. odoo开发笔记 -- 搜索视图继承扩展

    odoo开发笔记 -- 搜索视图继承扩展

  8. OpenMP初探

    OpenMP支持c.cpp.fortran,本文对比使用openmp和未使用openmp的效率差距和外在表现,然后讲解基础知识. 一.举例 1.使用OpenMP与未使用OpenMP的比较. OpenM ...

  9. 程序员、互联网从业者必读KK三大力作之《必然》总结

  10. 安装和配置jBPM4,并举个hello.w

    至于网上很复杂,但又不懂的插件,我们先不鸟他. myeclipse8\dropins这里就是给我们放插件的,类似SVN之类的.所以小生也修改了下,共享了下.只有放在目录下,打开应该可以的.下面是链接. ...