IIS7 URL重写忽略子应用程序中的规则

时间:2013-05-20 07:57:25

标签: iis-7 url-rewriting rewrite

我有MyWebSite和MyApp,如下所示:

MyWebSite
   web.config

   MyApp
      web.config
      Pages
         page.aspx

我希望下一个网址有效: www.mywebsite.com/oldpage.aspx

  1. MyWebSite \ web.config添加到网址“MyApp”:www.mywebsite.com/ MyApp /page.aspx
  2. MyApp \ web.config添加到网址“页面”:www.mywebsite.com/MyApp/ 页面 /page.aspx
  3. 我想在两个规则中分离这个逻辑,因为我希望每个规则都对它的部分负责。 MyWebSite应决定哪个应用程序是默认的,如果没有指定,它应该不知道MyApp中的“页面”。

    问题是,MyApp中的规则未被调用。

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

    P.S。 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>
    

1 个答案:

答案 0 :(得分:0)

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

然而,我成功实现它的唯一方法是使用肮脏的技巧。我不确定在生产环境中是否会推荐它,但是如果您想要使用此解决方案:

MyWebSite 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已启动并正常运行。)