【发布时间】:2012-02-18 11:20:11
【问题描述】:
我在子域之间拆分了一些页面,并希望在某些情况下对不同子域上的不同页面进行 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>
请注意网址末尾有一个 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。
有什么建议吗?
【问题讨论】:
标签: regex iis-7 url-rewriting url-rewrite-module