我爱编程

Apache中重写URL参数(Query String)

2017-04-28  本文已影响0人  php_bruce

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

上一篇下一篇

猜你喜欢

热点阅读