Consejos para crear reglas de reescritura (Rewrite Rules)

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

Te mostramos qué fuentes de error puedes comprobar si tus reglas de reescritura (Rewrite Rules) no funcionan como deseas.

Puedes cambiar el nombre y redirigir las páginas de un archivo .htaccess mediante reglas de reescritura. Por ejemplo, cambia el nombre de los URL de tus páginas web para la optimización de motores de búsqueda (SEO) o redirige 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úrate de que el archivo que subes a tu 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 hosting de IONOS, el módulo de Apache mod_rewrite ya está activo por defecto. Para que tus reglas de reescritura puedan tener efecto, enciende el llamado motor de reescritura (RewriteEngine). Para ello, introduce 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 se 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, puedes averiguar con qué directorio está vinculado actualmente un dominio.

RewriteBase y RewriteRule en el mismo directorio

Si deseas que la RewriteRule creada entre en vigor en el mismo directorio en el que se definió la RewriteBase, no especifiques 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, la página 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úrate de que el archivo .htaccess esté en el directorio correcto. Ten 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.

  • Evita 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 te permite definir cómodamente archivos .htaccess separados y reescribir reglas para cada dominio que no interfieran entre sí.

  • ¿Has 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: crea tú 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.

  • Comprueba que 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. Quita la almohadilla antes de RewriteRule y guarda el .htaccess modificado en el servidor.

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