更改 ASP.NET MVC 或 IIS 中的 URL 根路径

Posted

技术标签:

【中文标题】更改 ASP.NET MVC 或 IIS 中的 URL 根路径【英文标题】:Change the URL root path in ASP.NET MVC or IIS 【发布时间】:2015-07-20 08:01:00 【问题描述】:

我正在使用具有自定义 URL 的服务器:http://example.com/site/,如您所见,我需要更改我的应用程序的默认根路径 ("/") 以防止 404 错误。使用带有出站规则的 IIS 重写模块似乎有效,所有 html 链接和引用都被正确转换以查询内部网站。问题是在我的控制器中使用Redirect()RedirectToAction() 方法时,网站的内部名称会被删除,因此会导致404。这是我的 IIS 出站规则:

<rewrite>
  <outboundRules>
    <rule name="Add path prefix to urls" stopProcessing="true">
      <match filterByTags="A, Form, Img, Link, Script" pattern="^/(.*)" />
      <action type="Rewrite" value="/siteR:0" />
    </rule>
  </outboundRules>
</rewrite>

所以澄清一下:当帐户/登录发生重定向时,我有 http://example.com/site/,它变为 http://example.com/account/login 而不是 http://example.com/site/account/login 。我想必须修改 RouteConfig,但我不知道如何,或者我是否可以在 IIS 中做到这一点。我的 RouteConfig 类中有以下内容:

routes.MapRoute(
    name: "SiteRoot",
    url: "site/controller/action",
    defaults: new  controller = "Home", action = "Index" 
);

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

谢谢。

【问题讨论】:

为什么不在您的网站目录 (www.example.com) 下创建一个名为 site 的虚拟目录并将代码复制到那里。它会按照你想要的方式工作。? @pjobs 我不能,服务器根目录是example.com/site/,如果我创建一个虚拟目录,那么我会有example.com/site/site/ 你得到答案了吗?将我的 mvc react 应用程序部署到 IIS 服务器时,我也遇到了同样的问题,IIS 将为应用程序分配一个虚拟路径。 【参考方案1】:

假设问题仅存在于受授权注释保护的页面,您可能需要更新 /App_Start/Startup.Auth.cs 文件以更改登录路径。您正在寻找LoginPath = new PathString("/Account/Login"),,您将其更改为LoginPath = new PathString("/site/Account/Login"),。在我测试的 MVC 5 入门站点中,这是在第 28 行。

在我使用您的重定向规则和路由配置进行的测试中,正常RedirectToActions 工作正常,但如果您遇到问题,您可以尝试删除“默认”路由映射,以便路由器在以下情况下不会选择 URL 结构尝试重定向。

【讨论】:

感谢您的回答。我需要所有 URL 的 /site/ 根路径,一般包括图像、脚本和静态文件。我不能在这个文件中使用 ASP.NET 路由。 RedirectToAction 不适用于 IIS 出站规则 :(

以上是关于更改 ASP.NET MVC 或 IIS 中的 URL 根路径的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 6 使用 IIS 开发无需发布

在 IIS Express 或其他 WebServer 上部署 ASP.NET MVC 应用程序?

IIS 中的 Asp.Net 核心 MVC 应用程序 Windows 身份验证

ASP.NET MVC 404 错误处理 [重复]

ASP.NET MVC + IIS7 + FireFox:URL 中的斜杠

部署 ASP.Net MVC 2.0 应用程序 IIS 7.0