run htaccess deploy app angular angular2-routing

htaccess - El enrutamiento angular/enlace profundo no funciona con Apache 404



deploy angular in apache (8)

Estoy siguiendo los ejemplos de enrutamiento Angular 2. Utilizando el servidor web "lite" puedo navegar desde la raíz y funciona la vinculación profunda, pero usando Apache puedo navegar desde la raíz, pero obtengo errores 404 No encontrado al seguir enlaces directos a rutas.

Por ejemplo, la siguiente URL funciona contra el servidor web "lite" iniciado en el puerto 3000 por npm.

http://localhost:3000/crisis-center/2

Pero la siguiente URL contra Apache que se ejecuta en el puerto 80 falla.

http://localhost/crisis-center/2 The requested URL /crisis-center/2 was not found on this server.

Intenté algunas soluciones .htaccess recomendadas para problemas similares de Angular 1 pero no tuve suerte. Si alguien ha tenido un trabajo de enrutamiento y vinculación profunda de Angular 2 en Apache, hágamelo saber cómo lo logró.

@RouteConfig([ { // Crisis Center child route path: ''/crisis-center/...'', name: ''CrisisCenter'', component: CrisisCenterComponent, useAsDefault: true }, {path: ''/heroes'', name: ''Heroes'', component: HeroListComponent}, {path: ''/hero/:id'', name: ''HeroDetail'', component: HeroDetailComponent}, {path: ''/disaster'', name: ''Asteroid'', redirectTo: [''CrisisCenter'', ''CrisisDetail'', {id:3}]} ])

Boot.ts

import {bootstrap} from ''angular2/platform/browser''; import {ROUTER_PROVIDERS} from ''angular2/router''; import {AppComponent} from ''./app.component''; bootstrap(AppComponent, [ROUTER_PROVIDERS]);



Como la respuesta anterior realmente no responde la pregunta si desea que funcione con Apache. HashLocationStrategy sigue siendo una opción, pero si desea que funcione como está en Apache, debe hacer lo siguiente:

Cree un nuevo archivo .htaccess en la misma ubicación que su index.html . El siguiente código estará dentro:

<IfModule mod_rewrite.c> Options Indexes FollowSymLinks RewriteEngine On RewriteBase /crisis-center/ RewriteRule ^index/.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.html [L] </IfModule>

(Tenga en cuenta que en la pregunta <base href="/crises-center/"> dentro del index.html debe ser idéntico al RewriteBase)

Respuesta adaptada de la pregunta + respuesta del enrutamiento Angular 2 y acceso directo a una ruta específica: ¿cómo configurar Apache?


En httpd.conf o en apache2.conf agregue lo siguiente:

<Directory "/var/www/html/"> Options FollowSymLinks Allow from all AllowOverride All </Directory>

  • Cambie "/ var / www / html /" a la ubicación de su sitio web

Y en .htaccess pegar:

RewriteEngine On # If an existing asset or directory is requested go to it as it is RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d RewriteRule ^ - [L] # If the requested resource doesn''t exist, use index.html RewriteRule ^ /index.html


Para angular4 / angular en app.routes.module.ts incluye useHash como se muestra a continuación,

@NgModule({ imports: [RouterModule.forRoot(routes, {useHash: true})], exports: [RouterModule] })


Para aquellos que se ejecutan en Apache, use este .htaccess

<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^(.*) /index.html [NC,L] </IfModule>

Si aún recibe un error, ejecute esos 2 comandos:

sudo a2enmod rewrite sudo systemctl restart apache2


Según la respuesta de Rein Baarsma, debe crear el archivo .htaccess y colocarlo en el mismo directorio que su index.html en su servidor Apache. Puede ser, por ejemplo, el directorio htdocs , pero esto depende de la configuración de Apache.

Sin embargo, utilizo contenido de archivo .htaccess diferente y funciona para mí para todos los enlaces / rutas sin necesidad de especificar la base de reescritura:

<IfModule mod_rewrite.c> Options Indexes FollowSymLinks RewriteEngine On RewriteRule ^index/.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </IfModule>

Es una modificación del código proporcionado por Rein Baarsma.

Mi aplicación es una aplicación Angular 2+ (4.xx) basada en un proyecto angular-cli. Casi no depende de las URL directas a las direcciones proporcionadas por el enrutamiento angular. Sin el archivo .htaccess anterior, 404 not found después de hacer clic en cada enlace de URL directo. Ahora con el uso de este archivo .htaccess todo funciona bien.


Si está trabajando con la compilación iónica y carga su sitio en el servidor de alojamiento, entonces necesita agregar el archivo .htaccess en su directorio raíz dentro de la carpeta www .

RewriteEngine on RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^(.*) / [R=302,NC,L]