2011-12-28 22 views
7

私の友人のためにプロキシサーバーを家に戻そうとしています。私は現在、ウェブサイト(http://blogs.iis.net/carlosag/archive/2010/04/01/setting-up-a-reverse-proxy-using-iis-url-rewrite-and-arr.aspx)のチュートリアルに従っていますが、私は奇妙な問題に遭遇しました。IIS7でCSSファイル内のリンクのURL書き換えを修正する方法

私は/ pandoraをwww.pandora.comにリダイレクトしようとしましたが、CSSファイル内のリンクは変更されていません。さらに、それらは引き続きlocalhost/img/..パスにリンクされています。それらはlocalhost/pandora/img/..パスにリダイレクトされるべきです。最初のWebページ

<link rel="shortcut icon" href="/pandora/favicon.ico" type="image/x-icon" /> 
<link rel="icon" type="image/ico" href="/pandora/favicon.ico" /> 

<meta name="viewport" content="width=device-width, initial-scale=1.0"> 

<link rel="stylesheet" href="css/compiled.css?v=95845013"> 
<link id="valanceStyle" rel="stylesheet" type="text/css" href="/pandora/static/valances/pandora/default/design.css"/> 

から

snipletは、君たちは私がこの問題を解決する手助けすることはできますか?

答えて

11

ARRと組み合わせて送信リライトルールを使用してこれを行うことができます。次のルールはそれを行う必要があります。

<system.webServer> 
    <rewrite> 
     <outboundRules> 
      <rule name="Rewrite image URLs in CSS response" preCondition="IsCSS"> 
       <match pattern="localhost/img/" /> 
       <action type="Rewrite" value="localhost/pandora/img/" /> 
      </rule> 
      <preConditions> 
       <preCondition name="IsCSS"> 
        <add input="{RESPONSE_CONTENT_TYPE}" pattern="text/css" /> 
       </preCondition> 
      </preConditions> 
     </outboundRules> 
    </rewrite> 
</system.webServer> 

もちろん、localhostを適切なドメイン名に置き換える必要があります。別のドメイン名から書き直す場合は、一致タグに置換するドメイン名を含める必要があり、アクションタグには置換するドメイン名を含める必要があります。

CSSはHTMLではないため、URL書き換えモジュールのタグフィルタリング機能を使用することはできません。だから、大規模なCSSファイルでCPUを集中的に使用する可能性があるCSSファイルの内容全体に対して正規表現マッチングを行うだけです。置き換える必要があるURLの数が分かっている場合は、<match>タグにoccurrences="x"属性を追加して、URL書き換えモジュールが検索する一致数を制限できます。また、CSSルールをCSSファイルの先頭に移動してみてください。例えば:

<action type="Rewrite" value="localhost/pandora/img/" occurrences="3" /> 

また、IISでのユーザーモードキャッシュを有効にし、IISが書き換えられたコンテンツをキャッシュできるように<outboundRules>タグに属性rewriteBeforeCache="yes"を追加することができます。アウトバウンド書き換えルールについて例えば:

<outboundRules rewriteBeforeCache="yes"> 

もっと便利な情報やヒントがthis blog postで見つけることができます。

+0

あなたはどのファイルをこれに書いていますか? – ZeroDivide

+1

これはウェブサイトのルートディレクトリの 'web.config'にあります。 –

+0

これにより、500のサーバーエラーが発生します。どのノードに配置すべきですか? – ZeroDivide