2010-12-10 25 views
47

que no entienden nada acerca de IIS, pero estoy tratando de resolver este problema de redirigir todos los visitantes a domain.com/page a domain.com/page.htmlIIS reescritura de URL y Web.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.webServer> 
    <rewrite> 
      <rewriteMaps> 
       <rewriteMap name="StaticRedirects"> 
        <add key="/page" value="/page.html" /> 
       </rewriteMap> 
      </rewriteMaps> 
     </rewrite> 
    </system.webServer> 
</configuration> 

Surgen un par de problemas:

  1. No sé dónde colocar el archivo. Hay un directorio raíz de usuario, y un directorio htdocs, probé ambos, sin alegría.
  2. Ni siquiera sé si la cuenta puede hacer reescrituras, estoy tratando de descubrirlo.
+0

Siempre, aunque no puedo usarlo ahora ... pero para el futuro, o tal vez para ayudar a los demás :) –

Respuesta

99

1) Su web.config existente: ha declarado reescribir el mapa ... pero no ha creado ninguna regla que lo use. RewriteMap por sí solo no hace absolutamente nada.

2) A continuación se muestra cómo puede hacerlo (que no utiliza mapas de reescritura - sólo las reglas, lo cual está bien para la pequeña cantidad de reescrituras/redirecciones):

Esta regla se hará reescritura EXACTA SOLA (interno redirigir) /page a /page.html. La URL en el navegador permanecerá sin cambios.

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="SpecificRewrite" stopProcessing="true"> 
       <match url="^page$" /> 
       <action type="Rewrite" url="/page.html" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 

Esta regla # 2 hará lo mismo que el anterior, pero lo hará redireccionamiento 301 (redirección permanente), donde el URL en el navegador va a cambiar.

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="SpecificRedirect" stopProcessing="true"> 
       <match url="^page$" /> 
       <action type="Redirect" url="/page.html" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 

Regla # 3 intentará ejecutar tales reescritura para cualquier URL si hay tal archivo con la extensión .html (es decir, para /page se comprobará si existe /page.html, y si lo hace entonces reescribir ocurre):

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="DynamicRewrite" stopProcessing="true"> 
       <match url="(.*)" /> 
       <conditions> 
        <add input="{REQUEST_FILENAME}\.html" matchType="IsFile" /> 
       </conditions> 
       <action type="Rewrite" url="/{R:1}.html" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 
+2

Estaba tratando de entender estos mapas y su respuesta ayudó mucho. Gracias. Mi +1 – AYK

+2

@CodeSherpa Creo que Tomek dio la solución correcta un poco: solo modifique la suya: agregue '' y tal vez use '^ register \ .aspx $ '(observe el caracter \, esto asegurará que solo' register.aspx' será redireccionado, y no 'register2aspx', etc.). Además, asegúrese de que esté instalado el ** Módulo de reescritura de URL ** (se descarga por separado = no se incluye con IIS de forma predeterminada). – LazyOne

+0

@LazyOne me pueden ayudar para http://stackoverflow.com/questions/19904849/url-mapping-works-on-localhost-but-not-on-production-server-in-asp-net –

9

Acabo de probar esta regla, y funcionó con el alojamiento de GoDaddy ya que ya tienen instalado el módulo de reescritura de URL de Microsoft para cada cuenta de IIS 7.

<rewrite> 
    <rules> 
    <rule name="enquiry" stopProcessing="true"> 
     <match url="^enquiry$" /> 
     <action type="Rewrite" url="/Enquiry.aspx" /> 
    </rule> 
    </rules> 
</rewrite> 
+2

Gracias por mencionar el módulo que se está instalando, me di cuenta de que no lo tenía instalado y logré solucionar mi problema :) – lappy

12

Sólo quería señalar una cosa que falta en la respuesta de LazyOne (I habría simplemente comentado en virtud de la respuesta, pero no tienen suficiente rep)

en la Regla # 2 para redirección permanente hay que falta :

redirectType="Permanent"

lo que la regla # 2 debería tener este aspecto:

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="SpecificRedirect" stopProcessing="true"> 
       <match url="^page$" /> 
       <action type="Redirect" url="/page.html" redirectType="Permanent" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 

Editar

Para obtener más información sobre cómo utilizar el módulo de reescritura de URL ver este excelente documentación: URL Rewrite Module Configuration Reference

En respuesta a la pregunta de @kneidels los comentarios; Para que coincida con la URL: topic.php?id=39 algo como lo siguiente podría ser utilizado:

<system.webServer> 
    <rewrite> 
    <rules> 
     <rule name="SpecificRedirect" stopProcessing="true"> 
     <match url="^topic.php$" /> 
     <conditions logicalGrouping="MatchAll"> 
      <add input="{QUERY_STRING}" pattern="(?:id)=(\d{2})" /> 
     </conditions> 
     <action type="Redirect" url="/newpage/{C:1}" appendQueryString="false" redirectType="Permanent" /> 
     </rule> 
    </rules> 
    </rewrite> 
</system.webServer> 

Esto coincide con topic.php?id=ab donde a es cualquier número entre 0-9 y B es también cualquier número entre 0-9. Luego se redirigirá a /newpage/xy donde xy proviene de la URL original. No lo he probado, pero debería funcionar.

+0

Hola. Esta solución funciona muy bien para archivos statis. ¿Cómo se vería con una URL de coincidencia de: 'match url =" topic.php? Id = 39 "'? – kneidels

+1

@kneidels: Acabo de actualizar la respuesta, a ver si eso ayuda – Hjalti

Cuestiones relacionadas