我有一台拥有三个网站的服务器:
我想使用URL重写来访问网站A和网站B,例如:
http://myserver/A
http://myserver/B
代替
http://myserver:81
http://myserver:82
我已经安装了URL Rewrite
和Application 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是否正常?