Comprobador de sintaxis de .htaccess

Pega el contenido de un archivo .htaccess para detectar al instante errores comunes: etiquetas de bloque sin cerrar, nombres de directivas mal escritos, RewriteRule con muy pocos argumentos y líneas RewriteCond sin una regla asociada.

Consejos

  • Este comprobador es un análisis estático heurístico línea por línea, no un analizador real de Apache. Prueba siempre en un servidor real o en un entorno de staging antes de desplegar.
  • Si tienes acceso al servidor Apache, apachectl configtest es la comprobación de sintaxis más fiable que existe. Esta herramienta está pensada para verificaciones rápidas cuando ese comando no está disponible, como en un hosting compartido.
  • El aviso de "directiva no reconocida" es una suposición de baja confianza basada en una lista fija. Si usas una directiva de un módulo poco común, ver este aviso no significa necesariamente que esté mal escrita.
  • Encadenar varias líneas RewriteCond seguidas es un uso normal (funcionan como condiciones AND). Esta herramienta solo avisa cuando la última RewriteCond de la cadena no va seguida de un RewriteRule.
  • Antes de subir cambios a producción, aplícalos poco a poco y verifica cada paso, en lugar de reemplazar todo el archivo de una sola vez.

Preguntas frecuentes

La causa más habitual es que la configuración principal de Apache tenga AllowOverride None para ese directorio, lo que hace que .htaccess se ignore por completo. Pide al administrador del servidor que confirme que AllowOverride All (o al menos las categorías concretas que necesitas, como AuthConfig o FileInfo) está habilitado. También conviene comprobar si una caché del navegador o de una CDN está sirviendo una versión antigua.

La forma básica es RewriteRule patrón sustitución [banderas]. El patrón es una expresión regular que se compara con la ruta de la URL solicitada (sin la barra inicial), y la sustitución puede referenciar los grupos de captura del patrón con $1, $2, etc. Las banderas van entre corchetes, separadas por comas, como [L] (detener el procesamiento de más reglas) o [R=301] (redirección permanente).

Una causa muy frecuente es que la URL reescrita vuelve a coincidir con el patrón de la misma RewriteRule, así que Apache la reescribe una y otra vez. La solución estándar es añadir un RewriteCond como %{REQUEST_FILENAME} !-f (aplicar la regla solo si la ruta aún no corresponde a un archivo existente), de modo que la regla deje de activarse en cuanto el destino exista realmente.

En la mayoría de los hostings compartidos, todas las páginas de ese directorio empezarán a devolver un "500 Internal Server Error". Si tienes acceso al registro de errores del servidor, es la forma más rápida de localizar la línea y la causa exactas.

No, no puede garantizarlo. Esta herramienta realiza una comprobación estática heurística línea por línea y no reproduce por completo el comportamiento del analizador real de Apache. Que el módulo necesario (como mod_rewrite) esté cargado, o que una directiva esté permitida en ese contexto, depende del entorno del servidor, así que verifica siempre en un entorno de staging o en el servidor real antes de confiar en el resultado.
ツールくん

A propósito — ¿Por qué se llama ".htaccess"?

El nombre ".htaccess" es la abreviatura de "hypertext access" (acceso a hipertexto), y su historia se remonta a las primeras versiones de NCSA httpd y Apache, hacia 1995. Originalmente se introdujo para que los propietarios de un directorio pudieran configurar protección por contraseña (autenticación Basic) en su propio espacio sin necesidad de tocar el archivo de configuración global del servidor (httpd.conf), que solo el administrador podía editar.

Lo que hace potente a .htaccess es que, mientras el administrador de Apache lo haya permitido mediante la directiva AllowOverride, los cambios surten efecto en el momento en que se sube el archivo por FTP o un gestor de archivos, sin necesidad de reiniciar el servidor. Esto permite que usuarios de hosting compartido, que normalmente no tienen acceso a la configuración principal, controlen redirecciones, caché y restricciones de acceso directorio por directorio.

Esa comodidad tiene un coste, sin embargo. La propia documentación de Apache recomienda explícitamente colocar las directivas en la configuración principal del servidor en lugar de en .htaccess siempre que se tenga acceso para hacerlo. La razón es sencilla: Apache tiene que buscar y volver a leer los archivos .htaccess en cada directorio superior en cada solicitud, lo que supone una sobrecarga de rendimiento nada despreciable frente a tenerlo en la configuración principal.

Un simple error de sintaxis también puede salir caro: en muchos hostings compartidos, un .htaccess inválido convierte todas las páginas de ese directorio en un "500 Internal Server Error" en blanco, y localizar la causa exacta puede llevar bastante tiempo. Ejecutar una comprobación estática rápida como esta, además de una revisión cuidadosa, ayuda a detectar descuidos antes de que provoquen una caída tras el despliegue.