2015-05-09 42 views
4

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

<rewrite> 
    <outboundRules> 
    <rule name="Add path prefix to urls" stopProcessing="true"> 
     <match filterByTags="A, Form, Img, Link, Script" pattern="^/(.*)" /> 
     <action type="Rewrite" value="/site{R: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" } 
); 

谢谢。

+0

为什么不只是在您的网站目录(www.example.com)下创建一个名为site的虚拟目录并将代码复制到那里。它会以你想要的方式工作。 – pjobs

+0

@pjobs我不能,服务器的根目录是example.com/site/,如果我创建一个虚拟目录,那么我会有example.com/site/site/ – Adrianne

回答

0

假设问题只出现在受到授权批注保护的页面上,您可能需要更新/App_Start/Startup.Auth.cs文件以更改登录路径。您正在寻找LoginPath = new PathString("/Account/Login"),,您将更改为LoginPath = new PathString("/site/Account/Login"),。在我测试的MVC 5初学者网站上#28。

在我的测试中,您的重定向规则和路由配置正常RedirectToAction工作正常,但如果遇到问题,您可以尝试删除“默认”路由映射,以便路由器在尝试时未选择URL结构重定向。

+1

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