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.
Encontrar errores en un archivo .htaccess
Un `.htaccess` es un archivo en el que un solo carácter errado puede tumbar un sitio entero con un error 500. Pegue su contenido y esta herramienta detecta en el acto los errores típicos: una etiqueta de bloque sin cerrar, un nombre de directiva mal escrito, un `RewriteRule` corto de argumentos, un `RewriteCond` que quedó suelto.
**Lo que aquí se comprueba es la sintaxis, no si el archivo hace lo que usted quería.** Una regla de reescritura puede estar perfectamente bien formada y aun así no llevar a nadie a la URL que tenía en mente, si las condiciones vienen en mal orden. Merece la pena conocer además dos detalles de la especificación. El primero es que **un `RewriteCond` se aplica únicamente al `RewriteRule` que le sigue de inmediato**, de modo que enumerar varias condiciones y poner una sola regla al final sencillamente no funciona. El segundo es que **si `AllowOverride` está deshabilitado en la configuración del servidor, el `.htaccess` no se lee jamás.** Cuando nada ocurre pese a lo escrito, sospeche de la configuración del servidor antes que del archivo.
Cómo se usa
- Pegue el contenido de su .htaccess Introduzca el archivo entero tal como está.
- Pruebe antes con los ejemplos Se ofrecen un ejemplo válido y otro con errores.
- Lea las líneas señaladas **Las etiquetas sin cerrar y los argumentos ausentes se informan con su número de línea.**
- Revise la configuración del servidor si nada funciona **Si `AllowOverride` está deshabilitado, el archivo no se lee.**
Consejos para aprovecharla mejor
- 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 configtestes 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.
Cuándo resulta útil
Comprobar antes de publicar
**Un error en el `.htaccess` tumba el sitio entero, lo que hace que comprobarlo de antemano compense con creces.**
Añadir a un conjunto de reglas de reescritura
Tras añadir una condición a reglas existentes, puede ver si la forma se ha sostenido.
Descifrar una configuración heredada
En un archivo largamente ampliado, puede establecer si alguna parte ha dejado de surtir efecto.
Acotar un error 500
**Puede establecer primero si es la sintaxis lo que impide arrancar al servidor.**
Términos de .htaccess
- RewriteEngine
- La directiva que habilita la reescritura. **A menos que se ponga en `On`, ninguna de las reglas siguientes surte efecto.**
- RewriteCond
- Una condición sobre una reescritura. **Se aplica únicamente al `RewriteRule` que le sigue de inmediato**, lo cual conviene tener presente.
- RewriteRule
- La regla de reescritura en sí, que toma un patrón, un reemplazo y banderas como `[L,QSA]`.
- Banderas
- Los ajustes entre corchetes tras una regla. `L` detiene aquí el proceso y `QSA` arrastra la cadena de consulta.
- Etiqueta de bloque
- Un encierro como `
` o ` `. **Dejar uno sin cerrar produce un error 500.** - AllowOverride
- El ajuste del lado del servidor que decide qué directivas puede usar un `.htaccess`. **Allí donde está deshabilitado, el archivo no se lee.**
Preguntas frecuentes
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.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).%{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.
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.