私の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>
404 ページにヒットし、404 ページにリダイレクトされ、404 ページを更新し続ける人がいることに気付いたので、エラー ページにリダイレクトするのではなく、エラーが発生したときに URL を書き換えたいと思います。ここでは、書き直す方が良い解決策だと思います。
上記の構成は、 http://mysite.com/blahblahblah (a 404) にアクセスすると機能します。ただし、http://mysite.com/foo/blahblahblahにアクセスすると、エラー/404 ページが表示されますが、すべてのリンクと CSS は Web ルートではなく /foo から解決されるため、ページは次のように表示されます。スタイルなし。(/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 は、すべての CSS/リンクが正しいhttp://mysite.com/product.aspxのページを表示します。
リンクと CSS (ASP の ~ 演算子で解決します) は、有効なサブフォルダーに対して常に正しく表示されます (そのため、 http ://mysite.com/Adminで表示したときにサイトのルートにあるリンクはhttpを指します) http://mysite.com/Admin/someLinkではなく、://mysite.com/someLink