更改 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 行。
在我使用您的重定向规则和路由配置进行的测试中,正常RedirectToAction
s 工作正常,但如果您遇到问题,您可以尝试删除“默认”路由映射,以便路由器在以下情况下不会选择 URL 结构尝试重定向。
【讨论】:
感谢您的回答。我需要所有 URL 的/site/
根路径,一般包括图像、脚本和静态文件。我不能在这个文件中使用 ASP.NET 路由。 RedirectToAction
不适用于 IIS 出站规则 :(以上是关于更改 ASP.NET MVC 或 IIS 中的 URL 根路径的主要内容,如果未能解决你的问题,请参考以下文章
在 IIS Express 或其他 WebServer 上部署 ASP.NET MVC 应用程序?
IIS 中的 Asp.Net 核心 MVC 应用程序 Windows 身份验证