Skip to content

Procesar HTML como PHP en Nginx, Apache y Caddy: Guía completa

Tienes un sitio lleno de archivos .html que de repente necesitan procesamiento PHP. Quizá sea un sitio estático heredado al que se le añaden funciones dinámicas. Quizá estás migrando y no puedes renombrar cientos de archivos. O tal vez simplemente quieres URLs limpias sin la extensión .php.

Sea cual sea el motivo, obligar a tu servidor web a procesar archivos HTML a través de PHP es un requisito habitual. Esta guía cubre la configuración de Nginx, Apache y Caddy, todo dentro de la sencilla interfaz de FlyEnv.

¿Por qué procesar HTML como PHP?

Escenarios habituales

  1. Migración de sitios heredados: añadir includes de PHP a archivos HTML estáticos
  2. Preservación del SEO: mantener las URLs .html existentes mientras se añade lógica PHP
  3. Refactorización gradual: introducir PHP sin renombrar archivos de forma masiva
  4. Integración con un CMS: añadir cabeceras de WordPress/Drupal a páginas estáticas

Ejemplo de uso

html
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
    <?php include 'header.php'; ?>
</head>
<body>
    <h1><?php echo date('Y'); ?> Company Name</h1>
    <?php include 'navigation.php'; ?>
</body>
</html>

El archivo sigue siendo .html, pero PHP procesa los includes y las sentencias echo.

Requisitos previos

Antes de configurar tu servidor web:

  1. PHP-FPM configurado con límites de seguridad ampliados
  2. Servidor web en ejecución (Nginx, Apache o Caddy)
  3. Sitio creado en FlyEnv apuntando a tu proyecto

Configuración de Nginx

Paso 1: Modificar la configuración de seguridad de PHP-FPM

Edita la configuración del pool de PHP-FPM para permitir el procesamiento de archivos HTML:

ini
; In php-fpm.conf [www] section
security.limit_extensions = .php .php3 .php4 .php5 .php7 .html .htm

En FlyEnv: abre el módulo PHP -> Version -> Configuration -> edita php-fpm.conf

![Configuración de PHP-FPM] (Captura de pantalla: editor de configuración de PHP-FPM en FlyEnv)

Paso 2: Añadir el bloque location de Nginx

Edita la configuración del vhost de Nginx de tu sitio:

nginx
location ~ [^/]\.html(/|$) {
    try_files $uri =404;
    fastcgi_pass unix:/tmp/phpwebstudy-php-cgi-83.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
    include pathinfo.conf;
}

Importante: sustituye phpwebstudy-php-cgi-83.sock por el nombre real del socket de tu versión de PHP.

En FlyEnv: Host -> Site -> Nginx Settings -> edita el VHost

![Configuración del VHost de Nginx] (Captura de pantalla: editor de vhost de Nginx con el bloque location)

Paso 3: Reiniciar los servicios

  1. Reinicia PHP-FPM en FlyEnv
  2. Recarga la configuración de Nginx
  3. Prueba tu archivo HTML

Configuración de Apache

Apache lo gestiona a través de .htaccess o de la configuración del virtual host.

Método 1: Usar .htaccess (recomendado)

Crea o edita .htaccess en la raíz de tu sitio:

apache
# Parse HTML files as PHP
AddType application/x-httpd-php .html .htm

# Alternative for PHP 7+
AddHandler application/x-httpd-php .html .htm

Método 2: Configuración del Virtual Host

Edita el archivo de vhost de Apache en FlyEnv:

apache
<VirtualHost *:80>
    DocumentRoot "/path/to/your/site"
    ServerName example.test
    
    <Directory "/path/to/your/site">
        AllowOverride All
        Require all granted
    </Directory>
    
    # Parse HTML as PHP
    AddType application/x-httpd-php .html .htm
</VirtualHost>

Paso 3: Configurar mod_php o PHP-FPM

Para mod_php: No se necesita configuración adicional.

Para PHP-FPM con mod_proxy_fcgi:

apache
# Add to vhost
<FilesMatch "\.(html|htm)$">
    SetHandler "proxy:unix:/tmp/phpwebstudy-php-cgi-83.sock|fcgi://localhost"
</FilesMatch>

Configuración de Caddy

El CEL (Common Expression Language) de Caddy hace que esto sea muy sencillo.

Paso 1: Editar el Caddyfile

En FlyEnv: Host -> Site -> Caddy Settings -> edita el Caddyfile

nginx
example.test {
    root * /path/to/your/site
    
    # PHP-FPM handler for PHP files
    php_fastcgi unix//tmp/phpwebstudy-php-cgi-83.sock
    
    # Handle HTML files through PHP-FPM
    @htmlFiles {
        path *.html *.htm
    }
    
    route @htmlFiles {
        php_fastcgi unix//tmp/phpwebstudy-php-cgi-83.sock
    }
    
    file_server
}

Alternativa: configuración más simple

Para un procesamiento básico de HTML como PHP:

nginx
example.test {
    root * /path/to/your/site
    
    # This handles both .php and .html
    php_fastcgi unix//tmp/phpwebstudy-php-cgi-83.sock {
        try_files {path} {path}/index.php index.php
    }
    
    file_server
}

Nota: igualmente debes actualizar los límites de seguridad de PHP-FPM tal como se muestra en la sección de Nginx.

Solución de problemas

"El archivo se descarga en lugar de ejecutarse"

Causa: los límites de seguridad de PHP-FPM bloquean los archivos .html

Solución: asegúrate de que security.limit_extensions incluya .html en php-fpm.conf

"502 Bad Gateway" (Nginx)

Causa: ruta del socket de PHP-FPM incorrecta

Solución:

  1. Comprueba el nombre real del socket en /tmp/
  2. Actualiza fastcgi_pass con la versión correcta
  3. Verifica que PHP-FPM esté en ejecución

"Internal Server Error" (Apache)

Causa: el handler no está configurado correctamente

Solución:

  1. Verifica que el módulo PHP esté cargado: apachectl -M | grep php
  2. Revisa los logs de error de Apache
  3. Asegúrate de que AllowOverride esté habilitado para .htaccess

"Página en blanco"

Causa: error de PHP en el archivo HTML

Solución:

  1. Revisa los logs de error de PHP
  2. Habilita display_errors temporalmente
  3. Prueba primero con algo simple como <?php echo "test"; ?>

Consideraciones de rendimiento

Procesar HTML a través de PHP añade sobrecarga:

ConfiguraciónTiempo de respuestaMemoria
HTML estático1-5msNinguna
HTML vía PHP-FPM20-50ms10-30MB

Consejos de optimización:

  • Usa caché de opcode de PHP (habilitada por defecto en FlyEnv)
  • Considera una migración futura a la extensión .php
  • Usa caché de archivos estáticos siempre que sea posible

Advertencia de seguridad

Procesar HTML como PHP puede introducir riesgos de seguridad:

  1. Archivos subidos por usuarios: si los usuarios pueden subir archivos .html, pueden ejecutar código PHP
  2. Contenido de terceros: el HTML incluido desde fuentes externas pasa a ser ejecutable

Mitigación:

nginx
# Deny PHP execution in upload directories
location /uploads/ {
    location ~ \.(html|htm|php)$ {
        deny all;
    }
}

Preguntas frecuentes (FAQ)

P: ¿Esto afecta al rendimiento?

R: Sí, ligeramente. Los archivos HTML pasan por PHP-FPM en lugar de servirse directamente. Usa caché de opcode y considera esto algo temporal durante las migraciones.

P: ¿Puedo procesar otras extensiones como PHP?

R: Sí. Añade cualquier extensión a los límites de seguridad de PHP-FPM y a la configuración del servidor web. Alternativas habituales: .phtml, .php5.

P: ¿Esto romperá los sitios HTML estáticos?

R: No. El HTML estático sin etiquetas PHP se renderiza con normalidad. El procesador PHP simplemente deja pasar el contenido HTML sin cambios.

P: ¿Cómo revierto este cambio?

R: Elimina la configuración de location/handler y reinicia tu servidor web. Los archivos volverán a servirse como HTML estático.

P: ¿Puedo usar esto con WordPress?

R: Sí, aunque WordPress suele usar archivos .php. Esto es más útil para sitios híbridos o migraciones de proyectos heredados.

P: ¿Funciona con todas las versiones de PHP?

R: Sí. La configuración es idéntica desde PHP 5.6 hasta 8.4+.

Resumen

ServidorConfiguración clave
Nginxlocation ~ [^/]\.html con fastcgi_pass
ApacheAddType application/x-httpd-php .html
Caddyruta php_fastcgi para *.html

Todos los métodos requieren actualizar primero security.limit_extensions de PHP-FPM.

¿Necesitas ayuda con otras configuraciones de servidor? Consulta nuestra Guía de configuración de proxy inverso o la documentación de dominios personalizados.