Skip to content

Todo para WordPress, el desarrollo web — y mucho más

Auditoría de .htaccess: error 500, directivas muertas, intrusión

Auditoría de .htaccess: por qué el sitio devuelve 500 y qué reglas no funcionan

Arrastre el archivo: la herramienta encontrará el BOM, las directivas muertas, las reglas con alto riesgo de error 500 y los indicios de una intervención ajena. El archivo se lee en su navegador y no se envía a ningún sitio.

Las comprobaciones a nivel de bytes —BOM, CRLF, caracteres no imprimibles e invisibles— solo son posibles para un archivo. Al pegar desde el portapapeles el navegador ya los ha eliminado, así que la causa más frecuente de un error 500 se vuelve invisible.
El análisis se inicia automáticamente. El archivo no se envía a ningún sitio: lo lee su navegador.
Contexto

Un .htaccess limpio no cura un hackeo. Si el sitio está comprometido, el código malicioso vive en el PHP y el .htaccess es solo su consecuencia: el dropper reescribirá el archivo a los pocos minutos de que usted lo limpie. El orden es el inverso: primero encontrar el código ejecutable y después ordenar la configuración.

El archivo se lee en su navegador: su contenido no se envía a ningún sitio ni se guarda.

Por qué un archivo y no texto pegado

La causa más frecuente de un error 500 tras editar .htaccess no se ve en el texto. Es el BOM: tres bytes invisibles al principio del fichero que añade el Bloc de notas de Windows al guardar en UTF-8. Apache los considera parte de la primera directiva y no puede analizarla. Por eso la herramienta pide el fichero en sí: solo así se pueden leer los bytes y ver el BOM, los saltos de línea al estilo de Windows y los caracteres invisibles dentro de las líneas. El segundo grupo de problemas son las directivas que no hacen nada pero parecen operativas. mod_gzip_on es sintaxis de Apache 1.3; en los servidores actuales se ignora en silencio mientras uno lleva años creyendo que la compresión está activada. Un bloque ExpiresByType envuelto en una comprobación de mod_headers.c en lugar de mod_expires.c tampoco funcionará, y sin un aviso no se nota. En tercer lugar, php_value y php_flag. Solo funcionan cuando PHP está cargado como módulo de Apache. En los alojamientos modernos con PHP-FPM esa línea o se ignora o devuelve un 500 de inmediato. Y aparte, sobre seguridad: si en el fichero hay reglas que redirigen a los visitantes según el buscador del que vienen, o que ocultan la redirección al administrador, es una señal típica de compromiso. Pero un .htaccess limpio no cura el hackeo: casi siempre hay en algún lugar de los ficheros un script PHP que volverá a escribirlo.

Preguntas frecuentes