2015-05-09 102 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