Consejos para crear reglas de reescritura (Rewrite Rules)

Información válida para: packs de Hosting Linux y Servidor Dedicado Gestionado

Le mostramos qué fuentes de error puede comprobar si sus reglas de reescritura (Rewrite Rules) no funcionan como desea.

Puede cambiar el nombre y redirigir las páginas de un archivo .htaccess mediante reglas de reescritura. Por ejemplo, cambie el nombre de los URL de sus páginas web para la optimización de motores de búsqueda (SEO) o redirija el acceso para diferentes propósitos.

A tener en cuenta: las reglas de reescritura se definen en un archivo .htaccess en el servidor. Explicamos cómo crear un archivo .htaccess en el artículo de ayuda Crear archivos que comienzan con un punto en Windows. Por favor, asegúrese de que el archivo que sube a su espacio web a través de la Gestión de Archivos o FTP se llama realmente .htaccess.

mod_rewrite y activación del RewriteEngine

En los servidores de alojamiento web de IONOS, el módulo de Apache mod_rewrite ya está activo por defecto. Para que sus reglas de reescritura puedan tener efecto, encienda el llamado motor de reescritura (RewriteEngine). Para ello, introduzca el siguiente comando al principio del archivo .htaccess:

RewriteEngine On

Parámetro RewriteBase y la especificación de directorios

Después de activar el RewriteEngine, la llamada RewriteBase también debe ser especificada al principio del archivo .htaccess:

RewriteBase /

Con RewriteBase define desde qué directorio se debe acceder a la RewriteRule. Si se especifica RewriteBase con / (como en el ejemplo arriba), la ruta de salida es el directorio al que se enlaza el dominio a redirigir. En el área IONOS, en la sección Dominios & SSH, puede averiguar con qué directorio está vinculado actualmente un dominio.

RewriteBase y RewriteRule en el mismo directorio

Si desea que la RewriteRule creada entre en vigor en el mismo directorio en el que se definió la RewriteBase, no especifique ninguna otra ruta de directorio en su RewriteRule. Basta con especificar el fichero con el símbolo / delante.

RewriteEngine On
RewriteBase /
RewriteRule ^([a-z]+)\.html$ /index.php?$1 [R,L] 

RewriteBase y RewriteRule en diferentes directorios

Si una RewriteRule va a tener efecto en un directorio distinto al especificado por la RewriteBase, éste debe definirse con la especificación correspondiente de la ruta del directorio.

Ejemplo de RewriteRule, que debe funcionar en un directorio diferente al especificado en RewriteBase

La siguiente RewriteRule especifica que el archivo index.html debe cargarse automáticamente desde el directorio /test cada vez que se acceda a una página HTML inexistente.

RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\.html$ test/index.html 

Si el dominio ya hubiera estado conectado al directorio /test a través del área IONOS, la especificación del directorio /test en la RewriteRule ya no sería necesaria, ya que esto ya está definido a través de la especificación en la RewriteBase.

Consejos para evitar errores

A tener en cuenta: las reglas de reescritura pueden ser muy complejas y pueden causar un error 500. Estos errores pueden deberse a que sólo se ha introducido un carácter de forma incorrecta. Esto no es una falla del servidor. Por regla general, el sitio web funcionará sin problemas en cuanto se hayan comentado las líneas correspondientes en el archivo .htaccess.

Aquí se enumeran las causas más comunes de errores que pueden provocar que una regla de reescritura no tenga efecto, incluso si no produce un error 500.

  • Asegúrese de que el archivo .htaccess esté en el directorio correcto. Tenga en cuenta que un archivo .htaccess es recursivo. Por lo tanto, afecta al directorio en el que se ha guardado y a sus respectivos subdirectorios.

  • Evite múltiples archivos .htaccess anidados a nivel de ruta. Los errores en el archivo .htaccess de un subdirectorio pueden, bajo ciertas circunstancias, afectar negativamente a las reglas de reescritura de nivel superior en los niveles superiores del directorio.

  • Por esta razón, es mejor crear un directorio separado para cada dominio o presencia web. Esto le permite definir cómodamente archivos .htaccess separados y reescribir reglas para cada dominio que no interfieran entre sí.

  • ¿Ha creado un directorio protegido en el mismo directorio utilizando el área IONOS? Esta función sobrescribe los archivos .htaccess creados por el usuario y, por lo tanto, hace que las reglas de reescritura sean ineficaces. Nuestra recomendación: cree usted mismo la protección de directorios en su .htaccess mediante el artículo de ayuda Configurar la protección de directorios mediante .htaccess y FTP.

  • Compruebe si las funciones estén desactivadas. Algunos scripts predefinidos y sistemas de gestión de contenido (CMS), como Joomla, desactivan las reglas de reescritura para evitar problemas durante la instalación. En un archivo .htaccess, se desactivan los comandos escribiendo una almohadilla (#) al principio de la línea que debe desactivarse:

# Ejemplo de una Rewrite Rule:
# (De http://dominio.es/xyz.html se hace http://dominio.es/index.php?xyz
#
RewriteEngine on
RewriteBase /
# RewriteRule ^([a-z]+)\.html$ /index.php?$1 [R,L] 

En este ejemplo, la RewriteRule real ha sido desactivada y por lo tanto no se aplica. Quite la almohadilla antes de RewriteRule y guarde el .htaccess modificado en el servidor.

  • Compruebe si se han asignado los permisos de archivo necesarios (chmod) al .htaccess. En la Gestión de Archivos, haga clic con el botón derecho en los permisos de archivo .htaccess y seleccione Cambiar permisos. Introduzca el valor 644 en el campo Notación octal. Esto es suficiente para las funciones de un .htaccess.
  • Compruebe cuidadosamente si hay erratas en los comandos y asegúrese de que no falta nada.