查询字符串是指URL请求中“问号”后面的部分。比如,http://www.nowamagic.net/?foo=bar中粗体部分就是查询字符串,其中变量名是foo,值是bar。

1. 利用QSA转换查询字符串QUERY_STRING

QSA标志( Query String Appending)用于在URI中截取查询字符串,这个截取操作是通过小括号正则表达式实现的:

1 RewriteEngine On
2 RewriteRule /pages/(.+) /page.php?page=$1 [QSA]

  • 将会把请求/pages/123?one=two 映射到 /page.php?page=123&one=two
  • 注意粗体部分几乎是相同的,除了“问号”变成了“与”符号
  • 如果没有QSA标志,那么会映射到/page.php?page=123
  • 如果没有用到小括号正则表达式,就不需要QSA,这在上面一个小节中已经例证过了。
  • 小括号正则表达式可以截取查询字符串中的内容,但是如果没有开启QSA标志,那么在/page.php?page=$1中“问号”之后将会被剥离丢弃。这种特性可以用于实现“剥离查询字符串”

通过QSA,我们可以将简单链接/simple/flat/link/ 映射成 server-side.php?first-var=flat&second-var=link

1 RewriteEngine On
2 RewriteRule ^/([^/]+)/([^/]+)/? /index.php?first-var=$1&second-var=$2 [QSA]

2. 利用RewriteCond改写查询字符串QUERY_STRING

1 RewriteEngine On
2 RewriteCond %{QUERY_STRING} foo=(.*)
3 RewriteRule ^grab(.*) /page.php?bar=%1

  • 该规则将访问请求http://mysite/grab?foo=bar转换为http://mysite/page.php?bar=bar
  • RewriteCond用于捕获查询字符串(QUERY_STRING)中变量foo的值,并存储在%1
  • QUERY_STRING是Apache定义的“变量=值”向量(数组)

3. QSA与RewriteCond双剑齐发

1 RewriteEngine On
2 RewriteCond %{QUERY_STRING} foo=(.+)
3 RewriteRule ^grab/(.*) /%1/index.php?file=$1 [QSA]

  • 会把/grab/foobar.zip?level=5&foo=bar 映射到 /bar/index.php?file=foobar.zip&level=5&foo=bar
  • 转换后根目录是bar目录
  • foobar.zip?level=5中的“问号”变成了foobar.zip&level=5中的“与”符号

4. 剥离查询字符串

只需在要开始剥离的链接后面加个“问号”,并且不要启用QSA标志,就可剥离查询字符串。

view source print?
1 RewriteEngine On
2 # Whatever QS is
3 RewriteCond %{QUERY_STRING} .
4 # I don't want it with Question mark
5 RewriteRule foo.php(.*) /foo.php? [L]

改写URL的查询字符串QUERY_STRING(转)相关推荐

  1. 如何用js获取浏览器URL中查询字符串的参数

    首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...

  2. 获取请求url的查询字符串

    在两个页面间通过url传参的时候,需要获取传递的查询字符串,例如获取下面url的name对应的值: www.baidu.com/img?name=lili&age=18&school= ...

  3. URL 中,查询字符串与HTML实体冲突,可能带来的问题.

    此问题相关信息(我不放在最前面,似乎有些朋友会找不到的样子.) IE10+, Safari5.17+, Firefox4.0+,Opera12+, Chrome7+ 已经按新标准实现. 所以就没有这个 ...

  4. Nodejs--querystring (URL 查询字符串)

    2019独角兽企业重金招聘Python工程师标准>>> querystring 模块提供了一些实用函数,用于解析与格式化 URL 查询字符串 querystring.parse(st ...

  5. java 字符码查询_Java URL查询字符串参数的编码

    URLEncoder应该是走的路.您只需要记住,只编码单个查询字符串参数名称和/或值,而不是整个URL,确保不要查询字符串参数分隔符字符&也不是参数名称 – 值分隔符字符=. String q ...

  6. 字符串url获取参数_如何从URL查询字符串获取示例参数或将其附加到URL查询字符串(示例)?...

    字符串url获取参数 让我们剖析几个简单的用例,并查看视图参数的工作原理(视图参数名称不是强制性的,以匹配通过URL查询字符串传递的请求参数,但在本文中,我们将重点讨论这种情况): 情况1 在inde ...

  7. 如何从URL查询字符串获得/附加视图参数(示例)?

    让我们剖析几个简单的用例,并查看视图参数的工作原理(视图参数名称不是强制性的,以匹配通过URL查询字符串传递的请求参数,但在本文中,我们将重点讨论这种情况): 情况1 在index.xhtml页面中, ...

  8. flask带有传入参数既有URL还有其他参数类型:建议使用方式二(flask 使用查询字符串的方式)

    方式一: 例如此时,既需要传递带有URL的训练数据地址,还需要传入其他的参数 由于path类型会将所有的 / 不忽略,那么此时的 traget_cls 参数会被忽略,于是我们将带有URL的参数(即pa ...

  9. 通过正则格式化url查询字符串

    看到项目里通过js数组split方法格式化查询字符串的,突发奇想为什么不能用正则呢,性能如何?于是便有了如下代码: var url='www.baidu.com?a=123&b=456& ...

最新文章

  1. 没有地图也能导航?DeepMind用街景来认路
  2. java验证码实现简单_java实现简单的验证码功能
  3. SQL 交集 差集 并集 笛卡尔积 应用实例
  4. [学习笔记]matlab
  5. 解决方法WindowsError: [Error 193] %1 is not a valid Win32 application
  6. 重要的是改变命运,而非升职加薪
  7. 比较两大虚拟桌面厂商的系统镜像管理
  8. Html前端基础(这些基础标签你必须知道!)
  9. tensorflow分类的loss函数_tensorflow中loss函数
  10. RC充放电网络的定量计算
  11. kaggle之手写体识别
  12. unity3d改变物体的中心位置_Unity3d粒子特效:制作火焰效果
  13. 《善用佳软:高效能人士的软件应用之道》一2.2 流程图绘制软件:免费的Visio替代品...
  14. 【IDEA】IDEA 格式化 代码技巧 idea 格式化 会加 <p> 标签
  15. Geth私链的多节点运行
  16. 十一届恩智浦智能车竞赛 信标 --- 首安666队
  17. java写入html文件乱码,java写入到html文件 打开是乱码
  18. 2021易烊千玺高考成绩查询,易烊千玺高考成绩公布,很多诋毁他的人,瞬间都哑口无言...
  19. 微信小程序云存储中调用fileid作为图片路径,无法正常显示解决方法
  20. DFC Search In Depth-转

热门文章

  1. 如何将语音转换成文字?转换方法介绍
  2. 1048 数字加密 (20 分)java
  3. Docker持续部署图文详解
  4. ubuntu通过apt-get方式搭建lnmp环境以及php扩展安装
  5. Confd+Consul 配置文件动态生成
  6. Javascript 中 null、NaN和undefined的区别
  7. kali在执行 apt-get update 命令时报错的解决方法
  8. spark 入门及集群环境搭建
  9. Flask-admin 使用总结
  10. 01:谁考了第k名 个人博客:doubleq.win