URL在IIS 8.5中重写同一主机的不同端口

时间:2019-03-28 06:38:36

标签: regex iis url-rewriting

我有一台拥有三个网站的服务器:

  • 默认网站,端口80(无内容)
  • 网站A,端口81
  • 网站B,端口82

我想使用URL重写来访问网站A和网站B,例如:

http://myserver/A
http://myserver/B

代替

http://myserver:81
http://myserver:82

我已经安装了URL RewriteApplication Request Routing模块,并启用了ARR代理。

在默认网站上,我使用正则表达式模式/A/(.*)/B/(.*)创建了两个重写规则:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="WebsiteA" stopProcessing="true">
                    <match url="/A/(.*)" />
                    <action type="Rewrite" url="http://localhost:81/{R:1}" />
                </rule>
                <rule name="WebsiteB" stopProcessing="true">
                    <match url="/B/(.*)" />
                    <action type="Rewrite" url="http://localhost:82/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

使用Test pattern...功能,我可以验证{R:0}包含整个测试URL,而{R:1}仅包含A/B/之后的部分。我坐在指向端口81或82的重写URL 上。我仍然将正则表达式视为纯魔术,但是测试给出了我想要的东西。尝试通过/A//B/连接到网站给了我404错误。

看到这是一个非常常见的问题,有很多问题和答案,我选择了一个建议使用正则表达式模式^A(.*)$

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="WebsiteA" stopProcessing="true">
                    <match url="^A(.*)$" />
                    <action type="Rewrite" url="http://localhost:81/{R:1}" />
                </rule>
                <rule name="WebsiteB" stopProcessing="true">
                    <match url="^B(.*)$" />
                    <action type="Rewrite" url="http://localhost:82/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

使用测试功能时,我的测试URL未能匹配该模式,但是当我尝试使用新模式访问网站时,它就起作用了。

问题:我要使用后面的解决方案,但是它能正常工作是不是很幸运,我是否应该做些不同的事情?

当我将其提供给服务器时,测试功能不能成功匹配相同的URL是否正常?

0 个答案:

没有答案