首页 文章

IIS Url Rewrite 返回 404 错误

提问于
浏览
0

我有一个带有重写 URL 的 IIS 站点,用于隐藏 API 用户的端口(不是我的选择)。换句话说,主要端口将 URL 重写为同一台机器上的不同站点。

因此,如果我访问(端口 11001 仅用于测试,它最终将在端口 80 上):

http://apitest.mycompany.com:11001/v1/accounts
http://apitest.mycompany.com:11001/v1/swagger/docs/accounts

我希望重写从(分别)返回结果:

http://apitest.mycompany.com:9600/v1/accounts
http://apitest.mycompany.com:9600/v1/swagger/docs/accounts

这里只有一个重写规则,但是第二个 URL 被重写并正确返回,第一个 URL 会产生 404 错误。

我可以直接访问两个重写的链接,它们将工作。我也可以根据完全相同的规则进行临时重定向。

我的重写规则如下所示:

Match 
    - regex, ignore case: .*/accounts.*
Action
    - Rewrite
        - URL: 'http://apitest.mycompany.com:9600/{R:0}'
        - Append query string: true
        - Stop processing of subsequent rules: true

我一直在看失败的重写日志文件,但我看不出是什么问题:

fr000037.xml

freb.xsl

1 回答

  • 0

    在编写了每一个可想到的重写规则组合两天后,我终于发现了与规则无关的问题。

    问题发生在我的RouteConfig。它保留默认值:

    routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
    

    意味着由少于 4 个路径元素组成的任何路由都将被 ASP.NET 路由捕获而不是 URL 重写。我希望其他人可以详细说明为什么会这样,但看起来这个顺序是:

    Redirect > ASP Routing > Rewrite
    

    我希望其他人可以使用这个答案,因为这花了我两天的工作。

相关问题