1

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

为了解释我到目前为止所拥有的,如果我们以“用户”作为参数,并假设有两台服务器。服务器一用于服务名称以 A 和 M 之间的字母开头的用户,第二台服务器用于服务 N 到 Z。

因此,例如请求

https://www.example.com/service/用户=保罗

会去

https: //*am.internal。*example.com/service/?user=paul

并要求

https://www.example.com/service/用户=orla

会去

https: //*nz.internal。*example.com/service/?user=orla

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

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]

首先,如果是 nz,我只是重写,并将 URL 附加到规则 ($1)。如果不匹配nz,那么我默认发送给am。

我是 mod_rewrite 的新手,我似乎找不到可以按我想要的方式运行的组合或排列。

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

4

1 回答 1

0

Try this :

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]
于 2012-08-29T14:09:05.890 回答