2

我有 MyWebSite 和 MyApp,如下所示:

MyWebSite
   web.config

   MyApp
      web.config
      Pages
         page.aspx

我希望下一个 URL 可以工作:www.mywebsite.com/oldpage.aspx

  1. MyWebSite\web.config 添加到 URL 'MyApp' www.mywebsite.com/MyApp/page.aspx
  2. MyApp\web.config 添加到 URL 'Pages': www.mywebsite.com/MyApp/ Pages /page.aspx

我想将此逻辑分成两个规则,因为我希望每个规则都对其负责。MyWebSite 应该决定哪个应用程序是默认应用程序(如果没有指定),并且它不应该知道有关 MyApp 中的“页面”的任何信息。

问题是没有调用 MyApp 中的规则。

问题:我做错了吗?这是我无法在单独的配置文件中执行重写的限制吗?

PS MyWebSite 和 MyApp 在同一个应用程序池下运行。


MyWebSite web.config:

<rule name="Add 'MyWebSite' for ASPX pages">
    <match url="^([^/]+\.aspx)" />
    <action type="Rewrite" url="MyApp/{R:1}" />
</rule>

MyApp web.config

<rule name="Add 'Pages'">
    <match url=".*" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
         <add input="{URL}" pattern="Pages" negate="true" />
    </conditions>
    <action type="Rewrite" url="Pages/{R:0}" appendQueryString="true" />
</rule>
4

1 回答 1

0

您想要做的似乎可以阅读以下博客文章:http ://www.iis.net/learn/extensions/url-rewrite-module/using-global-and-distributed-rewrite-rules

然而,我成功让它工作的唯一方法是使用一个肮脏的把戏。我不确定在生产环境中是否会推荐它,但如果您想使用此解决方案:

我的网站web.config

<rule name="Add 'MyWebSite' for ASPX pages">
    <match url="^([^/]+\.aspx)" />
    <action type="Rewrite" url="http://www.mywebsite.com/MyApp/{R:1}" />
</rule>

我刚刚将Rewrite目的地更改为url="http://www.mywebsite.com/MyApp/{R:1}"(我也启动并运行了ARR )。

于 2013-05-22T15:59:05.290 回答