zoukankan      html  css  js  c++  java
  • 改写URL的查询字符串QUERY_STRING[URL重定向问号问题](转)

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

    'last|L' (最后一个规则 last)

    立 即停止重写操作,并不再应用其他重写规则。
    它对应于Perl中的last命令或C语言中的break命令。这个标记可以阻止当前已被重写的URL为其后继的规则所重写。
    举例,使用它可以重写根路径的URL('/')为实际存在的URL, 比如, '/e/www/'.

    'qsappend|QSA' (追加请求串 query string append)

    此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。 如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。

    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]
    
  • 相关阅读:
    最新闲鱼数据采集软件【2020年4月更新】
    拼多多改价精灵
    idhttp采集时遇到乱码问题解决
    拼多多店铺采集如何采集?【爬虫技术】
    【原创最新2018】淘宝如何获取别人店铺宝贝的上下架时间?
    android.support.v4.app.NotificationCompat引用包
    Delphi 7启动后提示Unable to rename delphi32.dro的解决办法
    NOIP 膜你题 DAY2
    NIOP 膜你题
    一个hin秀的小学三年级奥数题 [hin秀]
  • 原文地址:https://www.cnblogs.com/cnlihao/p/6992453.html
Copyright © 2011-2022 走看看