我在子域之间拆分了一些页面,并希望在某些情况下对不同子域上的不同页面进行 URL 重写。除了文件中的最后两条规则外,一切都是重写规则。最后两个规则确定将我固定的路径路由到哪个子域。
我这样做的方式是,如果我在路径前加上下划线 (_),那么它会保留在子域 A 上。如果我在路径前加上波浪号 (~),那么它会被重定向到子域 B。
所以我有这个规则:
<rule name="Login rule" stopProcessing="false">
<match url="(.*?)/?old-path/Login\.aspx$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_METHOD}" pattern="GET" />
</conditions>
<action type="Rewrite" url="~new-path/login.aspx" />
</rule>
请注意 URL 的末尾有一个 aspx。它继续处理,但我在重定向规则之前的列表末尾有一个通用的重写规则。这是为了删除子域 A (www) 上的所有 ASPX 扩展,但我想保留子域 B 的 ASPX 扩展(请不要建议删除第二个子域上的建议。谢谢 :)
<rule name="Remove ASPX" stopProcessing="false">
<match url="^([^www\.]+)\.aspx$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="_{R:1}" />
</rule>
问题是,这是行不通的,因为所有 URL 的开头都有 www。我对正则表达式不是很好,但我猜我需要将此规则应用于所有包含波浪号的 URL。我试过这个,但它也不是真的有效:
<match url="^_+\.aspx$" />
基本上我希望这条规则忽略我已经重写的 URL ~
,但如果我将 ASPX 放在_
路径的开头,则删除 ASPX。
有什么建议么?