2011-11-30 16 views
2

我有一個站點混合使用IIS 7.5的W2K8 R2服務器上運行的.html和.aspx頁面。該網站是舊網站的重新開發,所有網址和大部分內容已從舊網站更改爲新網站。由於人們使用舊的鏈接,我預計會獲得大量的404。自定義404頁面重定向不工作在IIS7.5當丟失的URL在子文件夾中

我想將404錯誤重定向到自定義頁面(/404.aspx)。這是我的web.config的(部分):

<system.web> 
    <customErrors mode="On" redirectMode="ResponseRewrite"> 
     <error statusCode="404" redirect="/404.aspx" /> 
    </customErrors> 
    </system.web> 
    <system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="Replace"> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" prefixLanguageFilePath="" path="/404.aspx" 
      responseMode="ExecuteURL" /> 
    </httpErrors> 
    </system.webServer> 

託管管道模式的應用程序池的這個網站是Integrated

這個重定向到我的自定義404.aspx頁面在某些時候運行良好,而其他時候它只是一種工作。這些種類的URL重定向就好:

然而,這些種類的URL(其中缺頁是在子文件夾中)收到一條奇怪的結果:

子文件夾URL會發生什麼?我從404.aspx頁面獲取HTML標記,但由於頁面中的所有CSS和腳本引用都缺失,因此頁面無法正確呈現我可以從嗅探網絡流量中知道,因爲不知何故,IIS正試圖將/folder/插入到URL爲的資源中,該資源的相對路徑位於我的404.aspx頁面中。例如,我的網站的根文件夾中的我的404.aspx頁面對css/style.css有引用,但對於/ folder /中缺少的頁面觸發的404頁面,瀏覽器嘗試下載:/folder/css/style.css - 顯然不是那裏。

有沒有人知道我在做什麼錯在這裏?

回答

1

你可以使用絕對路徑(從您的網站的根正斜槓開始)來引用樣式表:

<link rel="stylesheet" href="/css/style.css" type="text/css" /> 

或者你可以使用根相對URL(先從波浪和斜槓)。如果<link>元素位於<head runat="server"> -element中,則根相對URL將被轉換爲正確的客戶端相對路徑。

<head runat="server"> 
    <link rel="stylesheet" href="~/css/style.css" type="text/css" /> 

對於腳本,您必須自己解析根相對URL。使用System.Web.UI.Page的RESOLVEURL()方法:

<script type="text/javascript" src="<%= ResolveUrl("~/scripts/script.js") %>"></script> 

或者您可能只需要設置responseModeredirect在您的配置。

+0

使用我的404.aspx標記中的所有鏈接的絕對路徑竟然是一個可行的解決方案。將斜槓添加到所有href =和src =引用對於樣式表,腳本引用,圖像和超鏈接似乎都可以正常工作。我從設計師那裏得到的標記都帶有所有頁面相對的URL。我會試着請設計師在將來使用合適的URL,但我可能不會屏住呼吸!謝謝@michielvoo! –

相關問題