美文网首页我爱编程
Apache中重写URL参数(Query String)

Apache中重写URL参数(Query String)

作者: php_bruce | 来源:发表于2017-04-28 15:36 被阅读0次

    Apache中重写URL参数(Query String)

    URL参数(Query String)是URL里面“?”后面的部分,它通常用于传输参数给CGI脚本或者其它动态页面。在Apache中,该值存储在环境变量QUERY_STRING中(在PHP中,可以通过$_SERVER['QUERY_STRING']访问到)。

    在Apache中,大多对URL进行操作的指令,如、Redirect、Alias和RewriteRule,都不能直接访问该数据;不过,mod_rewrite模块却可以对URL参数进行添加、删除和修改。其中的关键就是使用RewriteCond来匹配%{QUERY_STRING}变量,如果需要的话,还可以使用[QSA]标志来附加URL参数。

    下面是一些例子。这些例子是放在Apache的配置文件中的服务器配置里,如果需要放到区或.htaccess里面,RewriteRule应做相应的修改。此外,这些例子也可通过在RewriteRule规则后加上[R]标志,从“内部别名方式(Alias)”变成“外部跳转方式(Redirect)”。

    通过URL参数进行访问控制

    如果 http://example.com/page?var=val 中的 var=val 包含字符串 foo ,则禁止访问。

    1.RewriteCond %{QUERY_STRING} foo

    2.RewriteRule ^/page - [F]

    删除URL参数

    将URL参数直接从URL中删除。

    1.RewriteRule ^/page /page?

    增加URL参数

    通过[QSA]标志保留原有URL参数的同时,在后面增加新的URL参数:var=val。

    1.RewriteRule ^/page /page?var=val [QSA]

    重写某些URL参数

    当URL参数包含字符串val时,将URL:http://example.com/page1?var=val 重写为: http://example.com/page2?var=val 。

    1.RewriteCond %{QUERY_STRING} val

    2.RewriteRule ^/page1 /page2

    注意,在这里如果你不修改URL参数的话,不需要使用[QSA]标志,原来的URL参数是默认附加的。

    修改URL参数

    当访问 /path 时,将字符串 val 修改为 other_val 。

    1.RewriteCond %{QUERY_STRING} ^(.*)val(.*)$

    2.RewriteRule /path /path?%1other_val%2

    上面的%1和%2是反向引用,来自之前的RewriteCond中正则表达式的匹配结果。

    将URL参数转换为路径

    将URL:http://example.com/path?var=val 转换为: http://example.com/path/var/val 。

    1.RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$

    2.RewriteRule ^/path /path/%1/%2?

    注意上面的转换仅用于单一的 var=val 参数,且其中只能包含字母、数字和下划线。

    将路径转换为URL参数

    这是上面的转换的反向操作。这个例子可以转换有效的任意三级路径的URL: http://example.com/path/var/val 将转换为 http://example.com/path?var=val 。

    1.RewriteRule ^/path/([^/]+)/([^/]+) /path?$1=$2

    关于路径转换可以参考重写路径信息(PathInfo)

    原文:http://wiki.apache.org/httpd/RewriteQueryString

    相关文章

      网友评论

        本文标题:Apache中重写URL参数(Query String)

        本文链接:https://www.haomeiwen.com/subject/fefazttx.html