博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
改写URL的查询字符串QUERY_STRING(转)
阅读量:6324 次
发布时间:2019-06-22

本文共 1445 字,大约阅读时间需要 4 分钟。

是指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改写查询字符串

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标志,就可剥离查询字符串。

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]

转载地址:http://cbvaa.baihongyu.com/

你可能感兴趣的文章
SftpUtil FTP文件上传
查看>>
UVA10815 Andy's First Dictionary
查看>>
Ext程序规划入门
查看>>
springboot集成swagger文档
查看>>
box-shadow
查看>>
实验3密码破解技术
查看>>
java面试题汇总(有的题无视即可,没什么实际用途)
查看>>
跨浏览器的事件对象
查看>>
ssh连接不上vmware虚拟机centos7.5
查看>>
知其所以然~mongodb副本集
查看>>
基础才是重中之重~泛型类的静态构造方法可不是只执行一次呀
查看>>
初涉算法——STL初步
查看>>
浏览器缓存机制浅析
查看>>
SharePoint 更新word 等文档的内容,包括替换哦。功能强大
查看>>
[Swerc2014 C]Golf Bot
查看>>
winxp可以禁用的服务
查看>>
ASP.NET MVC3 + Ninject.Mvc3 依赖注入原来可以这么简单
查看>>
DZY Loves Sequences
查看>>
第 8 章 容器网络 - 061 - flannel 的连通与隔离
查看>>
NABCD
查看>>