我的 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}&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