0

我的 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 (a 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的 URL显示http://mysite.com/product.aspx的页面,所有 CSS/链接都正确。

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

4

1 回答 1

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>
于 2012-07-16T15:41:33.930 回答