Angular en Apache: rutas al recargar y reglas .htaccess
Ver imagen del artículo

[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.

¿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.
$ tail -f comentarios.log
2 comentarios
- personas
- 2
- último mensaje
- hace 6 años
Escribir un comentario ↓donde la coloco es fichero
Hola, tienes que colocar el fichero .htaccess en la carpeta dónde se encuentra el index.html que tu aplicación Angular ha creado.