1

ここのいくつかの質問で推奨されているように、urlrewriter.net を使用しています。画像の表示とスタイルシートに問題があります。

私は ScottGu のブログ (ここでも推奨されています) を読みましたが、最後に彼はこの問題について言及し、サーバー コントロールなどに ~/ を使用するように述べています (記事の最後にある「CSS と画像の参照を正しく処理する」)。

私は彼の解決策を試しましたが、うまくいかないようです。

私にとってうまくいくと思われる唯一のことは、フルパスを書くことです。何らかの理由で、それは正しい解決策とは思えません。開発とデバッグに深刻な問題を引き起こす可能性があります。

問題の原因を知っている人はいますか?web.config ファイルで変更する必要があるものはありますか?

ありがとう

4

8 に答える 8

2

Page.ResolveUrl を試しましたか?

<link href="<%=Page.ResolveUrl("~/mycss.css")%>" type="text/css" rel="stylesheet" />
于 2009-01-09T17:37:10.407 に答える
2

私の経験では、ベースタグは解決するよりもはるかに多くの問題の原因です

最初のオプションを強くお勧めします。つまり、動作する前に .aspx拡張子をチェックすることによって、URL リライターが実行できることを制限します。

于 2008-12-16T16:18:30.320 に答える
0

あなたはこれを使うことができます:

<a href="<% =GetBaseURL() %>/">Home</a>

public static string GetBaseURL()
{

string url =HttpContext.Current.Request.Url.Scheme + “://” + HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.ApplicationPath.TrimEnd(’/') + ‘/’;

//EPiServer’s url start with a / so remove the url if (when) it contains one
if(url.EndsWith(”/”))
return url.Remove(url.LastIndexOf(”/”));
else
return url;
}
于 2009-07-04T08:43:37.170 に答える
0

スタイルシートと画像ディレクトリを書き換えエンジンから除外する必要があると思います。私はあなたが使用しているエンジンに精通していませんが、非常に幅広いルールに基づいて書き換える書き換えルールを使用している場合、スタイルシートと画像、および JavaScript を誤って指していると思います。

base タグを試すこともできます。

<base href="http://www.w3schools.com/images/" />

に配置して<head>、画像フォルダーをポイントしてみてください。

于 2008-12-07T20:13:34.093 に答える
0

~/ は runat="server" 属性を持つタグに対してのみ機能します。これは、asp.net にコントロールをレンダリングするように指示するためです。

例えば

<link href="~/mycss.css" type="text/css" rel="stylesheet" />

asp.net がコントロールをレンダリングしていないため、期待どおりにレンダリングされません。代わりに使用する必要があります。

<link runat="server" href="~/mycss.css" type="text/css" rel="stylesheet" />

または、CSS リンクを head タグに配置します。

<head runat="server">
  <link href="~/mycss.css" type="text/css" rel="stylesheet" />
</head>

于 2008-12-23T09:27:43.560 に答える
0

スタイルシートと画像にも問題がありました。

Base Href ソリューションを使用したくなかったので、相対パスを単一のスラッシュで開始するように更新するという問題を修正しました。

マイセットアップ

nopCommerceStore は、Web ショップの構築に使用されます。

nopCommerce は、「UrlRewritingNet.UrlRewrite」ライブラリを使用して URL の書き換えを処理します。

nopCommerce は、Web ショップの外観を定義するために ASP.NET のテーマとスキンを使用します。

サーバー側では、次のフォルダー構造があります。

root/App_Themes/darkOrange/base.css

root/App_Themes/darkOrange/cart-checkout-order.css

root/App_Themes/darkOrange/category.css

root/App_Themes/darkOrange/css/ie6.css (このファイルは最終的に削除されました)

root/App_Themes/darkOrange/img/transparent_image_example.png

ルート/css/ie6.css

ルート/MasterPages/Root.Master

ルート/Default.aspx ルート/Category.aspx

既定のページ (ブラウザーが http;//yourstore/default.aspx を要求) に到達すると、html ソースには次の html コードが含まれます。

<link href="App_Themes/darkOrange/base.css" type="text/css" rel="stylesheet" />
<link href="App_Themes/darkOrange/cart-checkout-order.css" type="text/css" rel="stylesheet" />
<link href="App_Themes/darkOrange/category.css" type="text/css" rel="stylesheet" />
...

ブラウザは次のリクエストを発行します。

http;//yourstore/App_Themes/darkOrange/base.css

http;//yourstore/App_Themes/darkOrange/cart-checkout-order.css

http;//yourstore/App_Themes/darkOrange/category.css

...

カテゴリ「本」をクリックすると、ブラウザーは http;//yourstore/Category/29-books.aspx を要求します)、html ソースには次の html コードが含まれます。

<link href="../App_Themes/darkOrange/base.css" type="text/css" rel="stylesheet" />
<link href="../App_Themes/darkOrange/cart-checkout-order.css" type="text/css" rel="stylesheet" />
<link href="../App_Themes/darkOrange/category.css" type="text/css" rel="stylesheet" />

ブラウザは次のリクエストを発行します。

http;//yourstore/Category/../App_Themes/darkOrange/base.css

http;//yourstore/Category/../App_Themes/darkOrange/cart-checkout-order.css

http;//yourstore/Category/../App_Themes/darkOrange/category.css

IE6 の透過 PNG

これまでのところ、すべて正常に動作しています。すべてのブラウザで外観を統一するには、IE6 固有のスタイルシートをロードする必要がありました。次の 2 つの重要なことを学びました。

  1. スタイルシートを「App_Themes」フォルダーに追加せず、別のフォルダーに配置します。

  2. 画像を参照する場合は、単一のスラッシュで始まる相対パスを使用してください。

スタイルシートと「App_Themes」フォルダー:

IE6 で表示されるページに特定のレイアウトを適用するために、新しいスタイルシートを作成し、「root/App_Themes/darkOrange/css」フォルダーに配置しました。ファイル「root/MasterPages/Root.Master」に、次の html コード行を追加しました。

<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="screen" href="/css/ie6.css" />
<![endif]-->

Css ファイルが「App_Themes フォルダー」または「App_Themes」内のサブフォルダーに配置されると、自動的に参照されます。これにより、IE6 以外のブラウザーで望ましくない動作が発生しました。IE6 レイアウトがページに適用され、ページの外観が台無しになりました。

既定のページ (ブラウザーが http;//yourstore/default.aspx を要求) に到達すると、サーバーは要求を解析します。結果の html ソースには、次の html コードが含まれます。

<!--[if IE 6]>
<link rel="stylesheet" type="text/css" media="screen" href="/css/ie6.css" />
<![endif]-->

しかし、html には次の行も含まれています。

<link href="App_Themes/darkOrange/css/ie6.css" type="text/css" rel="stylesheet" />

すべてのブラウザが次のリクエストを発行します。

http;//yourstore/App_Themes/darkOrange/css/ie6.css

IE6 は追加のリクエストを発行します (ファイルは IE キャッシュから取得されます)。

http;//yourstore/App_Themes/darkOrange/css/ie6.css

これは望ましくない動作であったため、「ie6.css」ファイルを新しいフォルダーに置き換える必要がありました。現在は「root/css/ie6.css」に配置されています。

画像の参照、URL の書き換え、および相対パス:

IE6 で透明な png 画像をサポートするために、ie6.css ファイルにはいくつかの css 'filter' プロパティが含まれています。

たとえば、div セレクターの 1 つには、次の CSS コード行が含まれます。

filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true', sizingMethod='crop', src='../App_Themes/darkOrange/img/transparent_image_example.png');

既定のページ (ブラウザーが http;//yourstore/default.aspx を要求する) に到達すると、IE6 は次のように要求します。

http;//yourstore/img/transparent_image_example.png

カテゴリ「書籍」をクリックすると、ブラウザーは http;//yourstore/Category/29-books.aspx を要求します) IE6 は次のように要求します。

http;//yourstore/img/transparent_image_example.png

どちらも「ページが見つかりません」(HTTP/1.1 404 Not Found) という結果になります。

交換後:

「../App_Themes/darkOrange/img/transparent_image_example.png」

と:

「/App_Themes/darkOrange/img/transparent_image_example.png」

すべてがうまくいきました。

これは、相対パスが 1 つのスラッシュで始まるためです。ブラウザは次のように URL を解釈します。

「http;//」で始まっていますか?はいの場合、絶対パスである必要があります。いいえの場合は、相対パスにする必要があります。

相対パス:

単一のスラッシュで始まりますか?はいの場合、それは「絶対パス参照」でなければなりません。いいえの場合は、「相対パス参照」でなければなりません

注: ドキュメント「Uniform Resource Identifiers (URI): Generic Syntax」( http://www.ietf.org/rfc/rfc2396.txt )のセクション 5「相対 URI 参照」を参照してください。

URL 書き換えページの場合:

「相対パス参照」 (例: 「http;//yourstore/Category/29-books.aspx」および「../App_Themes/darkOrange/img/transparent_image_example.png」) を使用すると、ブラウザーは失敗します。

「絶対パス参照」を使用すると、ブラウザーは成功します (例: 「http;//yourstore/Category/29-books.aspx」および「/App_Themes/darkOrange/img/transparent_image_example.png」)。

于 2009-11-24T10:10:59.170 に答える
0

URL の書き換えに関する大きな問題は、相対パスを使用すると失敗することです。

たとえば、アプリケーションのルートに page.aspx というファイルがあり、複数のナビゲーション レベルのページに使用されるとします。例えば

Virtual Path    =>    Physical Path
 /              =>    /page.aspx?id=1
 /food/banana   =>    /page.aspx?id=2

page.aspx に、/css/main.css にある css ファイルへの相対パスがあるとします。

<link rel="stylesheet" href="css/main.css"/>

page.aspx が /food/banana のコンテキストから実行されると、ブラウザーは存在しない /food/css/main.css を探します。

私が行っている方法は、画像、CSS、JS の URL 書き換えを無効にし、スタイルシート (および img src と JavaScript) への絶対リンクを設定することです。このようにして、ブラウザが常にそれを見つけることを保証できます. 次に、スタイルシートから背景画像の相対パスを使用できます。

この方法は、リンクを逆に書き換えるのに何週間も費やす必要がないため、維持するのが最も簡単であることがわかりました。

于 2009-07-04T09:08:19.570 に答える
0

2 番目にベース href を使用します。ただし、サイトがドメインのルートから実行されている場合、つまり、ビジュアル スタジオ サーバーと比較して、本番環境で実行されている場合の違いを少しごまかす必要があります。

<base id="BasePath" runat="Server"/>

次に、マスター コード ビハインドで。

protected void SetBaseHref() {
if (Request.RawUrl != Request.Url.PathAndQuery)
{
string baseUrl = "";

        if (Request.IsSecureConnection)
            baseUrl += "https://";
        else
            baseUrl += "http://";
        baseUrl += Request.Url.Host;

        if (Request.Url.Port != 80)
            baseUrl += ":" + Request.Url.Port.ToString();

        baseUrl += Request.RawUrl;

        BasePath.Attributes.Add("HREF", baseUrl);
    }

}

于 2008-12-16T16:14:12.810 に答える