944 063 154

Blog

IIS7, reglas de URL rewrite que deberías conocer

Publicado enDesarrollo web

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 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 corente al contenido que se ofrece en cada solicitud. 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, que nos permite de una forma muy sencilla aplicar las reglas necesarias para implantar nuestra estrategia de urls. IIS7 incluso eprmite crear certificados de seguridad SSL autofirmados, pero este tema lo tratamos en otro artículo.

Durante 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


<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><lt;/>$" />
 <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>