Las redirecciones son importantes en muchas situaciones. A veces, son imprescindibles.
Piense, por ejemplo, en un anunciante que quiere transmitir que www.domain.com/venta es realmente la dirección www.domain.com/viajar-a-europa. Lo que haríamos aquí es crear una página en DNN, llamada ‘venta’ y establecer la configuración para que sea redirigida a www.domain.com/viajar-a-europa.
Pero hay otras situaciones más complicadas, en las que deberá meterse de lleno en el archivo web.config para lograr su objetivo. Este artículo pretende ayudarle a empezar a tratar con algunas situaciones habituales, pero sólo es una introducción.
Sea cuidadoso
Editar el archivo web.config es una operación que debe hacerse con mucho cuidado. Un error puede dejar fuera de juego su sitio web, así que siempre haga una copia de seguridad del web.config, antes de modificarlo. Por ejemplo, cópielo y renómbrelo como web.config.old, y le será sencillo revertir cualquier cambio usando un cliente FTP.
No puede ponerlo en cualquier sitio
El archivo web.config sigue ciertas reglas de construcción. En concreto, la sección de reglas de redirecciones va dentro de la rama <system.webserver> del web.config. </system.webserver>
La sección de redirecciones tendrá este aspecto
<rewrite>
<rules>
Aquí irán las reglas
</rules>
</rewrite>
Para ayudarle a situar esta sección, busque la sección que incluye httpProtocol.
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Todo el código dedirecciones irá debajo de lo anterior, algo como:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
<rewrite>
<rules>
Aquí sus reglas de redirecciones
</rules>
</rewrite>
Ahora, los diferentes tipos de redirecciones. Todas ellas usan expresiones regulares, así que le será de ayuda conocer su sintaxis, no demasiado sencilla, por cierto. Si no, puede copiar el código a continuación y poner su propio nombre de dominio.
Forzar https
Actualmente, ya no hay discusión sobre si el SSL es obligatorio o no. Los certificados son baratos o gratuitos y su instalación nunca había sido tan fácil. Por tanto, sólo nos queda asegurarnos de que nuestros visitantes no lleguen a la versión no SSL de nuestro sitio web. Por lo tanto, vamos a redirigirlos a la versión SSL.
Algunos proveedores de alojamiento ofrecen Plesk, que tiene la opción de forzar el tráfico a SSL, pero es sencillo hacerlo mediante el web.config: a continuación, dos ejemplos para conseguirlo.
Versión 1
<rewrite>
<rules>
<rule name="Redirigir a https" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
Versión 2
<rule name="Redirigir a https " enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" negate="false" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="off" />
<add input="{HTTP_HOST}" pattern="www.mywebsite.com" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
Dominios adicionales
Algunos clientes tienen más de un dominio, y todos deben ser dirigidos al sitio web en el dominio principal. La mayoría de las veces, los dominios adicionales se compran para facilitar la comunicación, reclamando una palabra genérica o alternaciones en el nombre de dominio principal.
Por supuesto, no queremos mantener varios sitios web, ni pagar nombres de dominio adicionales por los certificados SSL, ni licencias adicionales por módulos en más de un dominio. Por tanto, una vez más, vamos a redireccionar. Esta vez, el dominio adicional (dominio 2) será dirigido al dominio 1
Como el dominio adicional no va a ser indexado por Google, nos bastará con:
<rule name="redirección a otro dominio" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" negate="false" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="www.domain2.com" />
</conditions>
<action type="Redirect" url="http://www.domain1.com{REQUEST_URI}" redirectType="Permanent" />
</rule>
Capturando el tráfico antiguo
La peor de las pesadillas: nuevo cliente, le desarrollamos una gran tienda online, mucho mejor que el viejo WooCommerce, todo sale bien, lo publicamos y... las ventas caen. ¡Yuhu!
Es muy probable que el 90% del tráfico se esté topando con una página de error 404 y huya de nuestro web. La tienda antigua tenía otra estructura, e incluso direcciones terminadas en .php. Además de clientes decepcionados, Google nos va a penalizar. La autoridad de páginas y del dominio están perdiendo puntos, y ésa es una reputación muy complicada de recuperar.
Por supuesto, la situación ideal es redirigir la antigua URL del producto A a su nueva URL. Pero esto puede suponer miles de redirecciones. Si no eres Aliexpress, seguramente es demasiado trabajo. La alternativa es redirigir todo lo que termine en .php. En esta situación, una redirección sería algo como:
<rule name="Redirigir URL antiguas" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny" trackAllCaptures="false">
<add input="{HTTP_HOST}{REQUEST_URI}" pattern="domainname.com/(.*)\.php" />
<add input="{HTTP_HOST}{REQUEST_URI}" pattern="www.domainname.com/(.*)\.php" />
</conditions><action type="Redirect" url="/" redirectType="Permanent"/>
</rule>
Básicamente, lo que esto dice es: sea la página de producto que sea, si acaba en .php, redirige a la página de inicio.
¿Y mis artículos del blog?
Otro caso que nos encontramos a menudo es la puesta al día de un módulo de blog. Por ejemplo, nuestro obsoleto Ventrian News Articles lo hemos actualizado con Easy DNN News:
<rule name="Blog VE">
<match url="^Blog/ctl/ArticleView/mid/1234/articleId/([0-9]+)/([_0-9a-z-\/ñáéíóúÑÁÉÍÓÚ%()]+)" />
<action type="Redirect" url="/blog/{R:2}" redirectType="Permanent" />
</rule>
Dame más, dame más...
Todo lo anterior son redirecciones configuradas en IIS. Toda la documentación está disponible en:
Versión traducida y ampliada del original de Tycho de Waard: Redirects in DNN
Publicación cruzada en el blog sobre DNN en español: Redirecciones en DNN