改写URL的查询字符串QUERY_STRING(转)
查询字符串是指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标志,就可剥离查询字符串。
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(转)相关推荐
- 如何用js获取浏览器URL中查询字符串的参数
首先要知道Location这个对象以及这个对象中的一些属性: href:设置或返回完整的url.如本博客首页返回http://www.cnblogs.com/wymninja/ host:设置或返回主 ...
- 获取请求url的查询字符串
在两个页面间通过url传参的时候,需要获取传递的查询字符串,例如获取下面url的name对应的值: www.baidu.com/img?name=lili&age=18&school= ...
- URL 中,查询字符串与HTML实体冲突,可能带来的问题.
此问题相关信息(我不放在最前面,似乎有些朋友会找不到的样子.) IE10+, Safari5.17+, Firefox4.0+,Opera12+, Chrome7+ 已经按新标准实现. 所以就没有这个 ...
- Nodejs--querystring (URL 查询字符串)
2019独角兽企业重金招聘Python工程师标准>>> querystring 模块提供了一些实用函数,用于解析与格式化 URL 查询字符串 querystring.parse(st ...
- java 字符码查询_Java URL查询字符串参数的编码
URLEncoder应该是走的路.您只需要记住,只编码单个查询字符串参数名称和/或值,而不是整个URL,确保不要查询字符串参数分隔符字符&也不是参数名称 – 值分隔符字符=. String q ...
- 字符串url获取参数_如何从URL查询字符串获取示例参数或将其附加到URL查询字符串(示例)?...
字符串url获取参数 让我们剖析几个简单的用例,并查看视图参数的工作原理(视图参数名称不是强制性的,以匹配通过URL查询字符串传递的请求参数,但在本文中,我们将重点讨论这种情况): 情况1 在inde ...
- 如何从URL查询字符串获得/附加视图参数(示例)?
让我们剖析几个简单的用例,并查看视图参数的工作原理(视图参数名称不是强制性的,以匹配通过URL查询字符串传递的请求参数,但在本文中,我们将重点讨论这种情况): 情况1 在index.xhtml页面中, ...
- flask带有传入参数既有URL还有其他参数类型:建议使用方式二(flask 使用查询字符串的方式)
方式一: 例如此时,既需要传递带有URL的训练数据地址,还需要传入其他的参数 由于path类型会将所有的 / 不忽略,那么此时的 traget_cls 参数会被忽略,于是我们将带有URL的参数(即pa ...
- 通过正则格式化url查询字符串
看到项目里通过js数组split方法格式化查询字符串的,突发奇想为什么不能用正则呢,性能如何?于是便有了如下代码: var url='www.baidu.com?a=123&b=456& ...
最新文章
- 没有地图也能导航?DeepMind用街景来认路
- java验证码实现简单_java实现简单的验证码功能
- SQL 交集 差集 并集 笛卡尔积 应用实例
- [学习笔记]matlab
- 解决方法WindowsError: [Error 193] %1 is not a valid Win32 application
- 重要的是改变命运,而非升职加薪
- 比较两大虚拟桌面厂商的系统镜像管理
- Html前端基础(这些基础标签你必须知道!)
- tensorflow分类的loss函数_tensorflow中loss函数
- RC充放电网络的定量计算
- kaggle之手写体识别
- unity3d改变物体的中心位置_Unity3d粒子特效:制作火焰效果
- 《善用佳软:高效能人士的软件应用之道》一2.2 流程图绘制软件:免费的Visio替代品...
- 【IDEA】IDEA 格式化 代码技巧 idea 格式化 会加 <p> 标签
- Geth私链的多节点运行
- 十一届恩智浦智能车竞赛 信标 --- 首安666队
- java写入html文件乱码,java写入到html文件 打开是乱码
- 2021易烊千玺高考成绩查询,易烊千玺高考成绩公布,很多诋毁他的人,瞬间都哑口无言...
- 微信小程序云存储中调用fileid作为图片路径,无法正常显示解决方法
- DFC Search In Depth-转