2012-05-07 133 views
3

我在IIS 7以下規則:IIS 7重寫規則和Url.Content發出

  <rule name="Category" enabled="true"> 
       <match url="^store/([0-9]+)/(.*)" /> 
       <action type="Rewrite" url="store?cid={R:1}" appendQueryString="false" logRewrittenUrl="true" /> 
      </rule> 

這似乎是在我的ASP.Net MVC 3應用程序正常工作,但是我有幾個@ Url.Content (「〜/」)條目解析爲/ store /作爲根,而不是/。例如,典型的網址是http://mysite.com/store/99/coats-with-hoods。編輯/更新:我仍然拉我的頭髮在這一個,所以我決定看看Url.Content代碼庫,我注意到它檢查URL是否已被重寫(真)和如果是,則使得路徑有關,這反過來也給我絕對的URL:

if (!PathHelpers._urlRewriterHelper.WasRequestRewritten(httpContext)) 
     return contentPath; 
    string relativePath = PathHelpers.MakeRelative(httpContext.Request.Path, contentPath); 
    return PathHelpers.MakeAbsolute(httpContext.Request.RawUrl, relativePath); 

人知道爲什麼會是什麼?我有點困惑,爲什麼會發生這種情況,以及我如何在我的應用程序中解釋它?

+0

你可以提供更多關於你的項目和IIS設置文件夾結構的信息嗎? –

+0

它運行在網站的根目錄下,沒有運行在虛擬目錄中,你還需要知道什麼? – Mantorok

回答

2

好吧,一旦我意識到我永遠不會能夠使用ASP.Net MVC的IIS重寫,我決定使用HttpContext.RewritePath來代替,現在它們看起來都像它應該那樣工作。

這是一個相當重要的問題,因爲它不僅僅是受影響的Url.Content,它也是控制器路由,我在這個特定頁面上有一個窗體,它也不正確地指向/ store /而不是/。

+0

這有幫助,但我也發現,簡單地刪除波浪號(〜)爲我工作。它不應該這樣工作,但它解決了這個問題。 – Jacques

+0

@Jacques只要它是根網站,就刪除波浪號。如果你在一個網站內部運行一個應用程序,那麼你需要這個代字符,否則它會進入根網站,這是不正確的。 – BVernon

1

如果您的網站目前是並將永遠是域/子域的根目錄(例如你總是打算~/意味着site.com/),則失去了~,也將讓所有的URL是/path/to/content。如你所見,~做一些古怪的巫術東西。

+0

雖然它不僅影響我的內容,但它也影響Html.BeginForm導致不正確的路線! – Mantorok