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>

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}&amp;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

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 に答える