944 063 154

Blog

IIS7, reglas de URL rewrite que deberías conocer

Publicado enDesarrollo y Programación

Cada vez es más importante disponer de una buena arquitectura de URLs en nuestras aplicaciones y sitios web. Arquitecturas de servicios como REST y la importancia de optimizar el SEO de cara a resultados de búsquedas; suelen ser los dos motivos más importantes para que nuestra aplicación necesite disponer de su propia estrategia de URLs coherente al contenido que se ofrece. Para realizar esta tarea, puedes recurrir a IIS7.

IIS7 (Internet Information Server) es un conjunto de servicios para servidores que utilicen Windows como sistema operativo. Una aplicación integrada en el sistema operativo que resulta muy fácil de administrar. Desde hace ya dos años, IIS7 goza de su propio sistema de URL rewrite nativo, lo que nos permite de una forma muy sencilla aplicar las reglas necesarias para implementar nuestra estrategia de URLs. IIS7 incluso permite crear certificados de seguridad SSL autofirmados, pero este tema lo trataremos en otro artículo.

A lo largo de los últimos años, hemos ido recopilando algunas de estas reglas. A continuación mostramos aquellas más necesarias para que tu estrategia de URLs obtenga los mejores resultados.

Eliminar la última barra “/” de la URL

Por ejemplo, si quieres eliminar la barra final de tu URL, deberías añadir unas líneas de código como las siguientes. De esta forma, aunque tu URL haya cambiado, el tráfico se redirigirá a la nueva dirección.


<rule name="Eliminar la ultima barra en la url" stopProcessing="true">

 <match url="(.*)/$" />
 <conditions>
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
 </conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}" />
</rule>

Agregar la última barra “/” a la URL

<rule name="Agregar la ultima barra a la url" stopProcessing="true">

 <match url="<span><span>(.*[^/])</span></>$" />
 <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
 </conditions>

<action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>

Convertir toda la URL a minúsculas

<rule name="Forzar toda la url a minusculas" stopProcessing="true">

    <match url=".*[A-Z].*" ignoreCase="false" />
     <action type="Redirect" url="{ToLower:{R:0}}" redirectType="Permanent" />

</rule>

Quitar las www del hostname

<rule name="Quitar las www" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
       <add input="{HTTP_HOST}" negate="true" pattern="^linube.com$" />
   </conditions>
    <action type="Redirect" url="https://linube.com/{R:1}" redirectType="Permanent" />
</rule>

Añadir las www al hostname

<rule name="Añadir las www" stopProcessing="true">
      <match url="(.*)" />
     <conditions>
        <add input="{HTTP_HOST}" negate="true" pattern="^www.linube.com$" />
     </conditions>
    <action type="Redirect" url="https://www.linube.com/{R:1}" redirectType="Permanent" />
</rule>

Forzar HTTPS

<rule name="Forzar https" stopProcessing="true">

     <match url="(.*)" />
     <conditions>
        <add input="{HTTPS}" pattern="^OFF$" />
     </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
</rule>

Rechazar hotlinking a imágenes

<rule name="Rechazar hotlinking" stopProcessing="true">

     <match url=".*.(gif|jpg|png)$"/>
     <conditions>
       <add input="{HTTP_REFERER}" pattern="^$" negate="true" />
      <add input="{HTTP_REFERER}" pattern="^https://linube.com/.*$" negate="true" />
     </conditions>
     <action type="Rewrite" url="/images/gandalf_nopuedespasar.jpg" />
</rule>

WordPress

<rule name="Wordpress" stopProcessing="true">

           <match url="*" />
           <conditions>
               <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
               <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="index.php" />

</rule>

Symfony (producción)

<rule name="Symfony" stopProcessing="true">

     <match url="^(.*)$" ignoreCase="false" />
       <conditions logicalGrouping="MatchAll">
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
     </conditions>
    <action type="Rewrite" url="index.php" appendQueryString="true" />

</rule>