首先,我不太擅长写正则表达式,为此我深表歉意。
我正在尝试将IIS设置为将URL从一个主条目重写为第二个蓝色/绿色条目站点。作为多租户设置的一部分,用户将通过美国州缩写来重定向。目前,我们只会在域名后寻找2个字母。所有流量都将进入主入口站点https://dev.app.com
,并重定向到欣赏状态的URL
例如:
http://dev.app.com/ca
或http://dev.app.com/ny
默认情况下,进入网站http://dev.app.com
根目录的用户将自动重定向到http://dev.app.com/ca
。 CA是我们的默认状态。
每个州都有自己的蓝色/绿色入口站点。例如:http://ca.app.entry
。蓝色/绿色条目站点具有反向代理重写规则,可将流量重定向到当前正在运行的任何站点。部署期间会更新蓝色/绿色重写规则。
此外,每个州都有自己的API。例如:http://ca.api.com
。主条目URL如下所示:https://dev.app.com/ca/ext
,它将流量转发到正确状态的API。
我一直在尝试设置重写规则以捕获状态缩写,并寻找ext
(如果存在)并转发到相应的AI站点。
对于默认URL,我首先创建了一个重写规则之前的重定向规则
<httpRedirect enabled="true">
<add wildcard="/" destination="/ca" />
</httpRedirect>
我要捕获状态缩写的下一条规则:
<rule name="StateRewrite" stopProcessing="true">
<match url="/([a-z]{2})/$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="http://{R:1}.app.entry" logRewrittenUrl="true" />
</rule>
测试表达式,只要[state] /后没有任何内容,我就可以得到正确的2字母状态缩写。因此http://dev.app.com/ca/someOtherqueryString不会产生匹配。转到http://dev.app.com/ca/似乎没有将流量转发到[state] .app.entry / [state]。如果我直接进入该州的入境站点,它将起作用。因此,转到ca.app.entry / ca路由到正确的蓝色/绿色站点。查看日志似乎并没有构造整个URL。我只在日志中看到/[state]/
:2018-12-27 16:57:25 127.0.0.1 GET /ca/
对于API网站,我尝试了类似(.*)/ext/(.*)
的模式规则。该规则位于状态缩写规则之后,但仍未路由到正确的状态API站点。
我可以使用一些帮助来构建规则以及如何订购它们。
答案 0 :(得分:1)
以下正则表达式将从字符串[a-z]{2}$
的末尾返回2个字符,如果后面可以有一个/,则类似于[a-z]{2}/?$
这是用于正则表达式的,它应该可以重写规则,但是我不确定重写如何正确地执行重写,因此希望对您有所帮助