2011-12-28 18 views
7

Estoy intentando configurar un servidor proxy para mis amigos en mi casa. Actualmente estoy siguiendo el tutorial en el sitio web (http://blogs.iis.net/carlosag/archive/2010/04/01/setting-up-a-reverse-proxy-using-iis-url-rewrite-and-arr.aspx) pero me he encontrado con un problema extraño.Cómo corregir la reescritura de URL para enlaces dentro de archivos CSS con IIS7

He intentado hacer/pandora redirigir a www.pandora.com pero los enlaces dentro de los archivos CSS no están cambiando. Además, todavía están vinculados a la ruta localhost/img/.. Deben ser redirigidos a la ruta localhost/pandora/img/..

sniplet desde la primera página del

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

pueden ustedes ayudar a solucionar este problema?

Respuesta

11

Es posible hacer esto con una regla de reescritura de salida en combinación con ARR. La siguiente regla debe hacerlo:

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

Debe reemplazar por supuesto localhost con los nombres de dominio adecuados. Si está reescribiendo desde un nombre de dominio diferente, entonces la etiqueta de coincidencia debe contener el nombre de dominio que desea reemplazar y la etiqueta de acción debe contener el nombre de dominio que desea que reemplace.

Como CSS no es HTML, no puede usar la función de filtrado de etiquetas del módulo de reescritura de URL. Por lo tanto, solo puede hacer la coincidencia de expresiones regulares con todo el contenido del archivo CSS, que puede ser intensivo en CPU en archivos CSS grandes. Si sabe cuántas URL deben reemplazarse, puede agregar el atributo occurrences="x" a la etiqueta <match> para limitar el número de coincidencias que debe buscar el módulo de reescritura de URL. También intente mover las reglas de CSS a la parte superior del archivo CSS. Ej .:

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

También puede habilitar el almacenamiento en caché en modo de usuario en IIS y añadir el atributo rewriteBeforeCache="yes" a la etiqueta <outboundRules> dejar caché de IIS el contenido reescrito. Ej .:

<outboundRules rewriteBeforeCache="yes"> 

información más útil y consejos sobre las reglas de reescritura de salida se pueden encontrar en this blog post.

+0

¿En qué archivo estás escribiendo esto? – ZeroDivide

+1

Esto debería estar en 'web.config', en el directorio raíz del sitio web. –

+0

Causa un error de 500 servidores. ¿En qué nodo debería colocarlo? – ZeroDivide

Cuestiones relacionadas