子文件夹中重写的404/500错误页面无法解析CSS /链接

时间:2012-07-16 14:27:12

标签: asp.net iis webforms

我的web.config文件中有以下内容:

<httpErrors errorMode="Custom" existingResponse="Replace">
    <remove statusCode="404" subStatusCode="-1" />
    <remove statusCode="500" subStatusCode="-1" />
    <error statusCode="404" path="/ErrorPage.aspx?status=404" responseMode="ExecuteURL" />
    <error statusCode="500" path="/ErrorPage.aspx?status=500" responseMode="ExecuteURL" />
</httpErrors>

我想在遇到错误时重写URL,而不是重定向到错误页面,因为我注意到人们点击了404页面,被重定向到404页面,然后不断刷新404页面。我认为重写是一个更好的解决方案。

如果我转到http://mysite.com/blahblahblah(404),上面的配置就有效。但是,如果我转到http://mysite.com/foo/blahblahblah,那么我会显示错误/ 404页面,但是所有链接和CSS都是从/ foo而不是web根解析的,因此页面显示时没有样式。 (甚至来自/ App_Themes文件夹的CSS文件,通常根据子文件夹重写)

我的web.config中有几个URL重写,重写根目录中的一些文件看起来像子文件夹,并且CSS /链接在那里正确解析:

<rewrite>
    <rules>
        <clear />
        <rule name="Rewrite Products" stopProcessing="true">
            <match url="^p([0-9]+)/([_0-9a-z-]+).aspx" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
            <action type="Rewrite" url="Product.aspx?pID={R:1}&amp;pName={R:2}" appendQueryString="false" />
        </rule>

因此,http://mysite.com/p145/product.aspx上的网址会显示http://mysite.com/product.aspx处的页面,所有CSS /链接都正确无误。

链接和CSS(我在ASP中使用〜运算符解析)始终针对有效的子文件夹正确显示(因此,在http://mysite.com/Admin查看时,我网站根目录中的链接将指向{{ 3}},而不是http://mysite.com/someLink

1 个答案:

答案 0 :(得分:1)

只需使用ResolveUrl包装您的链接,它将始终解析为根。

hyperlink1.NavigateUrl = ResolveUrl("~/path/page.aspx")

您也可以使用以下样式表执行此操作:

<link href="<%=ResolveUrl("~/resources/global.css")%>" rel="stylesheet" type="text/css" />

使用这样的脚本:

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