2010-04-27 70 views
13

¿Cómo puedo establecer una url de redirección para un directorio virtual en IIS 7.0? He instalado el último módulo de reescritura de URL 2.x.Url de redireccionamiento de IIS para el directorio virtual

puedo explicar mi problema con un ejemplo:

Tengo un sitio web en mi servidor IIS 7.0, www.mysite.com. Decidí crear un directorio virtual de "ventas" en mi sitio que apunta al directorio raíz del sitio web. Ahora necesito crear una URL de redirección para el vdir. El vdir apunta al mismo directorio raíz virtual que mi sitio raíz.

La gran idea es que puedo ir a www.misitio/ventas y me redirigiré automáticamente a www.misitio.es?productid=200.

Me trataron de redirigir con una reescritura de URL para vdir (no web), pero siempre me sale este mensaje de error:

Cannot add duplicate collection entry of type 'rule' with unique key 
attribute 'name' set to "test". 

Esto sucede cuando estoy señalando a la vdir virtual y tratar de añadir una regla .

Puedo agregar reglas al nivel del sitio web, pero las reglas no funcionan. Quiero decir url "www.misitio/ventas" me da el siguiente error. Sé que esa clave es única. Lo comprobé desde web.config.

Este tipo de característica fue realmente fácil de usar en IIS 6.0, solo apunte a vdir con su mouse y establezca las propiedades -> una redirección a url.

¿Alguien explica cuál es la forma correcta de hacerlo en IIS 7.0?

+0

Véase también [reescritura de URL de un subdirectorio a otro usando IIS dominio] (https://stackoverflow.com/questions/22392522/url-rewrite-of-a-subdirectory-to-a-different- domain-using-iis) en reenvío en lugar de redirigir. – Vadzim

Respuesta

28

En realidad no es tan fácil, pero no demasiado horrible.

1) Cree un directorio físico en lugar de un directorio virtual.

2) Asegúrese de tener los servicios de funciones de redirección de HTTP. Consulte http://www.iis.net/ConfigReference/system.webServer/httpRedirect

3) Abra el Administrador IIS y busque el directorio físico que desea redireccionar.

4) Haga doble clic en el icono 'HTTP Redirect' en IIS.

5) Compruebe el "redirigir las solicitudes a este destino" caja e introduzca la nueva dirección URL (http://example.com/newPage.html)

6) Comprobar los próximos dos cajas, según sea necesario; Encuentro generalmente necesario verificar ambos.

7) Presione el botón Aplicar.

8) Seleccione el sitio web y 'Reiniciar' en Administrar sitio web.

9) Prueba.

+0

Buena respuesta, +1 – ajdams

+0

Gracias ayudó –

+0

Funcionó muy bien, pero no tuve que reiniciar el sitio en IIS 8.5. –

2

El motivo por el que esto sucede es que, de forma predeterminada, todas las configuraciones de reglas se heredan de las aplicaciones web principales. Entonces, si hay una Regla definida dentro del sitio web raíz, se hereda en todos los sitios secundarios secundarios en la jerarquía; a menos que esté despejado.

Así, por ejemplo, si la jerarquía de aplicaciones de IIS es la siguiente - Sitio Web

defecto (Raíz)

| Aplicación web 1 (VDir1) | Web Sub Application 11 (VDir2)

| Aplicación Web 2 (VDir3)

la regla con el nombre de 'Prueba' si existe en la aplicación de la raíz, que se heredó a la Aplicación Web 1, Aplicación Web 11 y Aplicación Web 2

En su caso Web La aplicación 11 (VDir2) está físicamente en la misma ubicación que (VDir1). Por lo tanto, las configuraciones de IIS son las mismas para ambos directorios, ya que comparte el mismo archivo Web.config.

Por lo tanto, cualquier nueva regla añadida al archivo Web.config se aplicará automáticamente a estos dos directorios virtuales (VDir1 & VDir2). Y dado que las reglas se heredan de manera predeterminada, el motor de reglas en IIS encontrará un problema al analizar la regla, dado que ya existe por herencia.

Una posible solución sería agregar una etiqueta Borrar /> < antes de agregar cualquier Regla dentro del archivo web.config, para que borre cualquier regla heredada.

<rewrite> 
    <rules> 
    <clear/> 
    <rule name="test" stopProcessing="true"> 
     <match xxx /> 
     <action xxx /> 
    </rule> 
    </rules> 
</rewrite> 

Sin embargo, preferiría el nombre < Quitar = 'Nombre de regla> tag/en lugar de apuntar a la eliminación de solamente la regla de que necesita ser añadido en la configuración heredada. Esto garantizaría que todas las demás reglas en el sitio web raíz se hereden en la jerarquía; con solo esta nueva regla siendo (algo así como) anulada.

<rewrite> 
    <rules> 
    <remove name="test"/> 
    <rule name="test" stopProcessing="true"> 
     <match xxx /> 
     <action xxx /> 
    </rule> 
    </rules> 
</rewrite> 
+0

¿Esto realmente funciona? Esto es genio – Gaspa79

+0

@ Gaspa79, esto seguro. Podrías probarlo y publicar tus resultados. – XpertSiji

+0

Sí, lo probé y funcionó de maravilla. ¡Muchas gracias! – Gaspa79

Cuestiones relacionadas