2011-12-28 8 views
7

Sto provando a configurare un server proxy per i miei amici a casa. Attualmente sto seguendo il tutorial sul sito web (http://blogs.iis.net/carlosag/archive/2010/04/01/setting-up-a-reverse-proxy-using-iis-url-rewrite-and-arr.aspx) ma ho incontrato uno strano problema.Come risolvere la riscrittura dell'URL per i collegamenti all'interno di file CSS con IIS7

Ho provato a fare/pandora reindirizzare su www.pandora.com ma i collegamenti all'interno dei file CSS non cambiano. Inoltre sono ancora collegati al percorso localhost/img/.. Dovrebbero essere reindirizzati al percorso localhost/pandora/img/..

sniplet dalla prima pagina 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"/> 

Può voi aiutarmi a risolvere questo problema?

risposta

11

È possibile eseguire questa operazione con una regola di riscrittura in uscita in combinazione con ARR. La seguente regola dovrebbe farlo:

<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> 

Si dovrebbe naturalmente sostituire localhost con i nomi di dominio appropriati. Se stai riscrivendo da un nome di dominio diverso, il tag di corrispondenza dovrebbe contenere il nome di dominio che vuoi sostituire e il tag azione dovrebbe contenere il nome di dominio che vuoi sostituire.

Poiché il CSS non è HTML, non è possibile utilizzare la funzionalità di filtro tag del modulo di riscrittura degli URL. Quindi può solo eseguire la corrispondenza delle espressioni regolari con l'intero contenuto del file CSS, che può potenzialmente avere un utilizzo intensivo della CPU su file CSS di grandi dimensioni. Se sai quanti URL devono essere sostituiti, puoi aggiungere l'attributo occurrences="x" al tag <match> per limitare il numero di corrispondenze che il modulo di riscrittura dell'URL deve cercare. Prova anche a spostare le regole CSS nella parte superiore del file CSS. Es .:

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

È inoltre possibile attivare la modalità utente la cache in IIS e aggiungere l'attributo rewriteBeforeCache="yes" al tag <outboundRules> di lasciare cache di IIS il contenuto riscritto. Es .:

<outboundRules rewriteBeforeCache="yes"> 

informazioni più utili e curiosità riguardanti le regole di riscrittura in uscita possono essere trovati in this blog post.

+0

In che file stai scrivendo? – ZeroDivide

+1

Questo dovrebbe essere in 'web.config', nella directory principale del sito web. –

+0

Causa un errore di 500 server. In quale nodo dovrei posizionarlo? – ZeroDivide