Angular en Apache: rutas al recargar y reglas .htaccess

Publicado 2 min de lectura Revisado
Ver imagen del artículo
Logotipo de Angular: un escudo hexagonal con degradado de rosa a violeta y una A blanca

[EN CORTO] Si una ruta de Angular falla al recargarla en Apache, el servidor tiene que entregar index.html cuando la URL no corresponde a un archivo ni a un directorio que exista. Para una aplicación publicada en la raíz bastan las cuatro líneas de .htaccess de abajo. Bajo una subruta, la base de la aplicación y la regla del servidor tienen que coincidir.

Durante mi trabajo con Angular en Shure, en Chicago, me encontré con un problema habitual al desplegar una SPA: la navegación dentro de la aplicación funcionaba, pero recargar una ruta devolvía un error del servidor.

Angular / recargar una ruta. Un fallback para la aplicación, no para ocultar errores
Diagrama explicativo creado para esta entrada; no es una captura de producto.

¿Por qué falla la ruta al recargar?

Al abrir /productos/uno, Apache busca un recurso con esa ruta. Si la navegación la resuelve Angular, el servidor necesita entregar el archivo de entrada para que el router interprete la URL.

Para una aplicación desplegada en la raíz, un .htaccess puede partir de:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.html [L]

!-f comprueba que no sea un archivo existente. No lo sustituyas por !-s: un archivo vacío sigue siendo un archivo que quizá deba conservar su respuesta.

¿Y si la aplicación va en una subruta?

Si publicas bajo una subruta, configura la base de la aplicación y la resolución del servidor de forma coherente. Comprueba además dónde genera la compilación sus archivos de navegador: no todas las configuraciones de Angular producen la misma estructura.

¿Cómo compruebo que funciona?

Recarga una ruta interna y abre esa misma URL en una pestaña nueva. Comprueba JavaScript, CSS, imágenes y endpoints de API. El fallback no debe convertir cualquier error de recurso o respuesta del backend en el HTML de la aplicación.

No desactives toda la caché para arreglar el router. Los archivos versionados y el documento de entrada necesitan políticas distintas.

Referencia: despliegue de Angular.

Compartir esta entrada WhatsApp X / Twitter LinkedIn Reddit Telegram Bluesky Email
Siguiente comando: volver al archivo o pulsa Ctrl + K
Hilo abierto

2 comentarios

personas
2
último mensaje
hace 6 años
Escribir un comentario
    1. David Abellán Autor

      Hola, tienes que colocar el fichero .htaccess en la carpeta dónde se encuentra el index.html que tu aplicación Angular ha creado.

Escribe tu comentario

Si planteas un problema técnico, di sistema, versión, qué esperabas y qué has probado. Respeto y cero spam: tu correo no se publica.

0 caracteresCtrl + Enter para enviar

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.