2013-08-29 66 views
3

我有一個標準的MVC3項目與佈局頁面等。現在我需要製作漂亮的URL。我開始玩URL重寫模塊。我想http://localhost/Photographer/Pablo轉化爲http://localhost/category-about.aspx?displayName=Pablo,這裏是我的重寫規則:IIS URL重寫模塊:Url.Content()不能正確解析CSS /圖像路徑

<system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="about" patternSyntax="Wildcard"> 
      <conditions> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      <add matchType="IsDirectory" negate="true" /> 
      <add input="{REQUEST_URI}" pattern="\.png|\.js|\.css|\.jpg" negate="true" /> 
      </conditions> 
      <match url="photographer/*" /> 
      <action type="Rewrite" url="category-about.aspx?displayName={R:1}" logRewrittenUrl="true" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 

你看到我使用Google試圖解決這一問題後添加的所有條件 - 他們並沒有什麼幫助(很簡單的!)。

我發現此頁面:http://www.iis.net/learn/extensions/url-rewrite-module/url-rewriting-for-aspnet-web-forms - 其中說當應用重寫規則時,〜操作符被服務器正確處理。但是,這顯然在我的情況不會發生 - 請看圖片附:

image attached

什麼是解決我的問題?我應該如何引用CSS/JS文件?我在IIS 7.5上使用MVC3。

UPDATE: 圖像不是很清楚 - 但它表明我MasterLayout頁面有

<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 

但它解析爲

http://localhost/Photographer/Content/Site.css - and it gives 404 

,而不是

http://localhost/Content/Site.css - which gives 200 

當我請求這個網址:http://localhost/Photographer/Pablo。邏輯工作正常 - 我的控制器獲取請求並呈現頁面 - 但它的CSS和圖像丟失(因爲它們有錯誤的根文件夾)。

+0

IIS 7.5如果這有幫助... – avs099

回答

2

你說行:

<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" /> 

解析爲

的 「http://本地主機/攝影師/內容/的site.css」

,這是絕對糾正這是如何解決的。你的CSS在哪裏撒謊,是在CSS中圖像的路徑是否正確?

+0

你爲什麼認爲這是正確的?它應該是http://localhost/Content/Site.css – avs099

+0

由於「〜」會將您帶到根虛擬目錄,現在的問題是如何將它映射到IIS中。在啓動應用程序時,你得到的URL是什麼? –

+1

http:// localhost/ – avs099

4

嘗試使用Request.ApplicationPath。像這樣的東西應該工作:

<link href="@(Request.ApplicationPath + "Content/Site.css")" rel="stylesheet" type="text/css" /> 
+0

不錯..但你可以進一步解釋一下.. – Shivaay

+0

當重寫規則到位時,Url.Content似乎存在一個錯誤。我遇到了一些其他文章描述這個確切的問題,但沒有關於根本原因的詳細信息。我實際上已經更新了我的回覆,因爲如果您依靠Request.ApplicationPath將應用程序根目錄添加到路徑中,則不需要實際使用Url.Content。 –

+0

請注意,Request.ApplicationPath不包含結尾斜槓。我試圖編輯答案來更新它,但它說我的更新必須是6個字符。我不想找到其他5個角色來改變。 – BVernon

0

而不是這樣的

<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 

試試這個沒有符號(〜)

<link href="@Url.Content("/Content/Site.css")" rel="stylesheet" type="text/css" /> 

這應該解析爲您希望http://localhost/Content/Site.css