RewriteRule将根据on查询字符串参数重定向?

时间:2011-01-16 02:35:48

标签: apache

如果请求页面page1.html和查询字符串中的uin是12或13以外的任何内容,请让他们看到此page1.html页面,否则将其重定向到page2.html


更新: BTW,查询字符串中还有其他参数。它们也应该被发送到任一页面。

2 个答案:

答案 0 :(得分:0)

您正在寻找的重写条件是%{QUERY_STRING}

这是另一个做类似事情的问题:Redirecting URLs (with specific GET parameters)

答案 1 :(得分:0)

如果uin = 12或uin = 13,这将重定向到page2.html。整个查询字符串将发送到page2.html页面:

 # EDIT: Doesn't properly handle all cases
 RewriteCond %{QUERY_STRING}  [\&]+uin=1[23][&]+ [OR]
 RewriteCond %{QUERY_STRING}  ^uin=1[23][&]+
 RewriteRule ^/page1\.html   /page2.html  [R]

编辑:这样做要好得多,并且会在查询字符串的任何位置处理参数,包括开头或结尾,还会过滤掉字符串在另一个参数中的情况,像suin = 123

 RewriteCond %{QUERY_STRING} ^(.*&)*uin=1[23](&.*)*$
 RewriteRule ^/page1\.html   /page2.html  [R]

我测试了下列情况:

重定向


http://local.sandbox.com/page1.html?hello=world&uin=13&test=1
http://local.sandbox.com/page1.html?uin=12&test=1
http://local.sandbox.com/page1.html?uin=12
http://local.sandbox.com/page1.html?uin=13
http://local.sandbox.com/page1.html?uin=13&t=t
http://local.sandbox.com/page1.html?t=t&r=r&uin=13&t=3
http://local.sandbox.com/page1.html?t=t&uin=13

没有重定向:
http://local.sandbox.com/page1.html?uin=11&test=1
http://local.sandbox.com/page1.html?hello=world&uin=1&test=1
http://local.sandbox.com/page1.html?hello=world&ui=13&test=1
http://local.sandbox.com/page1.html?t=t&&r=r&suin=13&t=3
http://local.sandbox.com/page1.html?t=t&&r=r&uin=134&t=3
http://local.sandbox.com/page1.html?suin=134&t=3
http://local.sandbox.com/page1.html?auin=13&t=t
http://local.sandbox.com/page1.html?uin=134&t=3
http://local.sandbox.com/page1.html?t=t&uin=134
http://local.sandbox.com/page1.html?t=t&auin=13