IIS Url重写返回404错误
我有一个带有重写URL的IIS站点,可以对API用户隐藏端口(不是我的选择)。换句话说,主机将URL重写到同一台机器上的不同站点 因此,如果我访问(端口11001仅用于测试,它最终将位于端口80): 我希望重写返回(分别)的结果: 这里只有一个重写规则,但是当第二个URL被重写并正确返回时,第一个on会产生404错误 我可以访问这两个重写的链接直接和他们将工作。我还可以根据完全相同的规则进行临时重定向 我的重写规则如下所示:IIS Url重写返回404错误,iis,url-rewriting,Iis,Url Rewriting,我有一个带有重写URL的IIS站点,可以对API用户隐藏端口(不是我的选择)。换句话说,主机将URL重写到同一台机器上的不同站点 因此,如果我访问(端口11001仅用于测试,它最终将位于端口80): 我希望重写返回(分别)的结果: 这里只有一个重写规则,但是当第二个URL被重写并正确返回时,第一个on会产生404错误 我可以访问这两个重写的链接直接和他们将工作。我还可以根据完全相同的规则进行临时重定向 我的重写规则如下所示: Match - regex, ignore case: .*
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
我一直在查看失败的重写日志文件,但看不出问题出在哪里:
我花了两天时间编写了所有可能的重写规则组合,终于发现了与规则无关的问题 问题出在我的
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
我希望其他人可以使用这个答案,因为这花费了我整整两天的工作
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Redirect > ASP Routing > Rewrite