【发布时间】:2018-12-28 19:45:12
【问题描述】:
首先,我不擅长写正则表达式,所以对此我深表歉意。
我正在尝试设置 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>
测试表达式我得到正确的 2 字母状态缩写,只要 [state]/ 之后没有任何内容。所以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 站点。
我可以使用一些帮助来构建规则以及它们需要如何排序。
【问题讨论】:
标签: regex iis url-rewriting