Utilizar las rewrite rules en .htaccess

  1. Información general
  2. Requisitos
  3. Instrucciones generales
  4. Las expresiones regulares
  5. Solución de problemas ( Troubleshooting )

 

  • Información general

El fichero .htaccess (hypertext access), es un fichero especial, basado en un analizador de expresiones regulares, que utilizando el módulo de Apache mod_rewrite y el cual permite definir diferentes directivas de configuración para cada directorio (con sus respectivos subdirectorios), es decir, volver a escribir las solicitudes de URL que entran en su servidor. Los siguientes ejemplos muestran cómo:

Los archivos .htaccess, deben estar ubicados en la raíz del directorio donde se precisa su efecto y éste es inmediato al tratar de acceder desde un navegador al sitio.

 

      • Solicitudes directas desde subdirectorio a un subdirectorio diferente o al directorio principal (raíz del site). http://ejemplo.com/directorio1/ se puede convertir en http://ejemplo.com/directorio2/ o simplemente http://ejemplo.com/.
      • Las solicitudes directas a un subdirectorio. http://ejemplo.com/archivo.html se convierte en http://ejemplo.com/directorio1/archivo.html.
      • Añadir www a cada petición. http://ejemplo.com se puede convertir en http://www.ejemplo.com, o también convertir el http en https.
Cuando se implementa correctamente, mod_rewrite puede llegar a ser una herramienta realmente potente. Hay una gran variedad de aplicaciones para mod_rewrite que se puede consultar en el sitio oficial de Apache.

  • Requisitos

Antes de comenzar debe tener las credenciales de una cuenta FTP, con permisos para poder añadir y/o modificar su archivo .htacces

Más información de como crear una cuenta FTP
Más información de donde alojar los ficheros subidos por FTP.
Más información de como cambiar la contraseña de su cuenta FTP.

  • Instrucciones generales
      1. Crear un archivo de texto plano llamado htaccess
      2. Agregue las líneas del ejemplo apropiado para su archivo. Tenga en cuenta que debe reemplazar ejemplo de texto con su propia información y guarde los cambios.
      3. Utilice FTP para subir el archivo a la raíz de documentos del dominio apropiado.
Una vez cargado el archivo, la regla de reescritura debe entrar en vigor inmediatamente.
Algunos sistemas de gestión de contenido (CMS), como WordPress, por ejemplo, sobrescribir archivos htaccess con su propia configuración. En ese caso, puede que tenga que encontrar una manera de hacer su reescritura desde dentro de la CMS.

Opciones de reescritura:


      • Redirigir un directorio a otro con htaccess rewrite

        Debería seleccionar esta opción, en el caso de no tener la misma estructura de archivos en ambos directorios:

        Options +FollowSymLinks
        RewriteEngine On
        RewriteRule ^directorio1.*$ http://ejemplo.com/directorio2/ [R=301,L]

      • Redirigir un archivo a otro con htaccess rewrite

        Seleccione esta opción si su contenido está duplicado en los dos directorios:

        Options +FollowSymLinks
        RewriteEngine On
        RewriteRule RewriteRule ^directorio1/(.*)$ http://ejemplo.com/directorio2/ [R=301,L]

      • Añadir www o https con htaccess rewrite

        Options +FollowSymLinks
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^ejemplo.com [NC]
        RewriteRule ^(.*)$ http://ejemplo.com/$1 [R=301,L]

      • Redirigir http a https con htaccess rewrite

        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^(.*)$ https://www.ejemplo.com/$1 [R,L]

  • Las expresiones regulares

Las rewrite rules a menudo contienen símbolos que forman una expresión regular (regex). Así es como el servidor sabe exactamente cómo desea que su dirección URL cambie.

Sin embargo, las expresiones regulares pueden ser difíciles de descifrar a primera vista. Por eso, a continuación le mostraremos algunos elementos comunes, que usted podrá ver en las rewrite rules de archivos .htaccess.

      • ^ – Indica el principio de la palabra a buscar.
      • $ – Indica el final de la palabra a buscar. Es decir, ^directorio1$ indicaría exactamente, directorio1.
      • . – El punto, serviría para indicar cualquier carácter menos el espacio (ejemplo: a, B, 3).
      • * – El asterisco indica, que el carácter previo, puede aparecer 0 o más veces. Por ejemplo, ^uploads.*$ indicaría uploads2009, uploads2010, etc.
      • () – Los paréntesis nos permiten agrupar y guardar una parte de la primera cadena, para su uso posterior, utilizando la variable $1, en la segunda cadena. Esto es útil para manejar peticiones a ficheros en particular que deberían ser lo mismo tanto en la antigua como la nueva versión de la URL
Puedes ver más expresiones regulares en sitio oficial de Perl.

 

  • Solución de problemas (Troubleshooting)

  • 404 No encontrado

Examine la nueva URL en el navegador de cerca. ¿Coincide con un archivo que existe en el servidor de la nueva ubicación especificada por la regla de reescritura? Puede que tenga que hacer su regla de reescritura más amplia (que puede ser capaz de eliminar los $ 1 a partir de la segunda cadena). Esto dirigirá reescrituras a la página del índice principal que figura en la segunda cadena. O bien, puede que tenga que copiar archivos desde su ubicación anterior a la nueva ubicación.

Si la URL es simplemente errónea (como http://ejemplo.com/directorio/fichero1//fichero.html – nota las dos //) que tendrá que volver a examinar su sintaxis.

  • URL Infinito, tiempo de espera, redirigir bucle

Si usted nota que su URL es ridículamente larga, que su página no se carga, o que su navegador le da un mensaje de error sobre la reorientación, es probable que tenga redirecciones en conflicto en su lugar.

Usted debe revisar su archivo completo htaccess para reescribir las reglas que podrían coincidir con otras reglas de reescritura. También puede ser necesario para comprobar los archivos htaccess en los subdirectorios. Tenga en cuenta que en el FTP no se mostrarán archivos los archivos htaccess a menos que haya activado la opción de ver los archivos y carpetas ocultos.

Además, es posible incluir redirecciones dentro HTML y PHP páginas. Y añadir [L] después de una regla de reescritura puede ayudar en algunos casos, debido a que dice que el servidor deje de intentar reescribir una URL después de haber aplicado esa regla.

Artículos relacionados