使用Apache和mod_rewrite来引导基于查询字符串值的流量

时间:2012-08-29 13:53:14

标签: regex apache mod-rewrite

本质上,我试图使用(出于此问题范围之外的原因)使用查询字符串参数的第一个字符来负载平衡两台服务器,以便决定发送流量的服务器。

为了解释我到目前为止的情况,如果我们将“user”作为参数,并假设有两个服务器。服务器1用于为名称以A和M之间的字母开头,以及第二个服务器为N到Z的用户提供服务。

例如,请求

https://www.example.com/service/ <?强> 用户=保

会去

的https:// * A-m.internal * example.com /服务/用户=保罗

请求

https://www.example.com/service/ <?强> 用户=奥拉

会去

的https:// *正z.internal * example.com /服务/用户=奥拉

到目前为止,我有这样的事情:

RewriteEngine On
RewriteCond %{Query_String} ^[\?\&]user=[n-z].*
RewriteRule ^(.*) https://n-z. internal .example.com/service/$1 [P]

RewriteRule ^(.*) https://a-m.internal.example.com/service/$1 [P,L]

首先,我只是重写它是否为n-z,并将URL附加到规则($ 1)。如果它与n-z不匹配,那么我默认将它发送到a-m。

我是mod_rewrite的新手,我似乎无法找到符合我要求的组合或排列。

有人能解释为什么我没有得到预期的结果吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteCond %{QUERY_STRING} ^(.*\&)?user=[a-m]
RewriteRule ^(.*)$ https://a-m.internal.example.com/$1 [QSA,P]

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteCond %{QUERY_STRING} ^(.*\&)?user=[n-z]
RewriteRule ^(.*)$ https://n-z.internal.example.com/$1 [QSA,P]