改写URL的查询字符串QUERY_STRING
2014-07-09 16:34
302 查看
查询字符串是指URL请求中“问号”后面的部分。比如,http://www.nowamagic.net/?foo=bar中粗体部分就是查询字符串,其中变量名是foo,值是bar。
1. 利用QSA转换查询字符串QUERY_STRING
QSA标志( Query String Appending)用于在URI中截取查询字符串,这个截取操作是通过小括号正则表达式实现的:
将会把请求/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
2. 利用RewriteCond改写查询字符串QUERY_STRING
该规则将访问请求http://mysite/grab?foo=bar转换为http://mysite/page.php?bar=bar
RewriteCond用于捕获查询字符串(QUERY_STRING)中变量foo的值,并存储在%1中
QUERY_STRING是Apache定义的“变量=值”向量(数组)
3. QSA与RewriteCond双剑齐发
会把/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标志,就可剥离查询字符串。
WordPress 里的静态链接,有印象吗?这是 Wordpress 配合 Mod Rewrite 模块和 .htaccess 文件一起实现的,即所谓的固定链接(Permalinks)。它可以在动态与静态中切换,其实它不高深,用的就是本小节所讲到的方法。
1. 利用QSA转换查询字符串QUERY_STRING
QSA标志( Query String Appending)用于在URI中截取查询字符串,这个截取操作是通过小括号正则表达式实现的:
RewriteEngine On 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
RewriteEngine On RewriteRule ^/([^/]+)/([^/]+)/? /index.php?first-var=$1&second-var=$2 [QSA]
2. 利用RewriteCond改写查询字符串QUERY_STRING
RewriteEngine On RewriteCond %{QUERY_STRING} foo=(.*) 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双剑齐发
RewriteEngine On RewriteCond %{QUERY_STRING} foo=(.+) 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标志,就可剥离查询字符串。
RewriteEngine On # Whatever QS is RewriteCond %{QUERY_STRING} . # I don't want it with Question mark RewriteRule foo.php(.*) /foo.php? [L]
WordPress 里的静态链接,有印象吗?这是 Wordpress 配合 Mod Rewrite 模块和 .htaccess 文件一起实现的,即所谓的固定链接(Permalinks)。它可以在动态与静态中切换,其实它不高深,用的就是本小节所讲到的方法。
相关文章推荐
- 改写URL的查询字符串QUERY_STRING(转)
- 此请求的查询字符串的长度超过配置的 maxQueryStringLength 值 --不仅wen.fonfig一个地方需要设置
- HttpUtility.ParseQueryString 获取字符串URL中的参数
- 解决Asp.net Web网站发布到服务器上运行时,某界面传参数过多,造成的“此请求的查询字符串的长度超过配置的 maxQueryStringLength 值”错误。
- 采用PHP函数http_build_query生成URL-encoded的查询字符串
- Node基础:url查询参数解析之querystring
- JS解析查询字符串 parseQueryString
- 此请求的查询字符串的长度超过配置的 maxQueryStringLength 值
- HttpUtility.ParseQueryString直接从字符串URL中提取参数
- URL 的查询字符串,比如localhost:8080?name=Alice里面的name,可以用req.query.name拿到。请修改一个路由,使之可以收到查询字符串,然后输出'Hello ' +
- PHP获取当前url路径的函数及服务器变量:QUERY_STRING、REQUEST_URI、SCRIPT...
- Node(5) URL and Query String
- 加密解密url QueryString 发生 Invalid length for a Base-64 char array异常解决方法
- javascript获取URL查询字符串
- Request.Url.Query 和 Request.QueryString的区别
- PHP函数补完:http_build_query()构造URL字符串
- 编写一个JavaScript函数 parseQueryString,把URL参数解析为一个对象
- 获取url参数 SQ.getQueryString("参数名") --javascript
- String处理: 获得URL的最后一个字符串
- Use the Url Query String with the DataFormWebPart