J'ai une application Angular. J'exécute la commande ng build --prod --aot
pour générer le dossier dist . Dans le dossier dist, j'ai créé un fichier nommé Staticfile puis j'ai téléchargé le dossier dist dans pivotal.io à l'aide des commandes suivantes. :
L'application fonctionne bien. J'ai une barre de navigation, donc quand je change de chemin avec navbar, tout fonctionne bien. Mais quand je le fais manuellement (j'entre l'URL moi-même), j'ai cette erreur 404 Not Found nginx . This my app.component.ts:
const appRoutes: Routes = [
{ path: 'time-picker', component: TimePickerComponent },
{ path: 'material-picker', component: MaterialPickerComponent },
{ path: 'about', component: AboutComponent },
{ path: 'login', component: LoginComponent },
{ path: 'registration', component: RegistrationComponent },
{
path: '',
redirectTo: '/time-picker',
pathMatch: 'full'
}
];
@NgModule({
declarations: [
AppComponent,
TimePickerComponent,
MaterialPickerComponent,
DurationCardComponent,
AboutComponent,
LoginComponent,
RegistrationComponent,
],
imports: [RouterModule.forRoot(
appRoutes
// ,{ enableTracing: true } // <-- debugging purposes only
),
FormsModule,
BrowserAnimationsModule,
BrowserModule,
MdCardModule, MdDatepickerModule, MdNativeDateModule, MdInputModule
],
providers: [{ provide: DateAdapter, useClass: CustomDateAdapter }],
bootstrap: [AppComponent]
})
export class AppModule {
constructor(private dateAdapter: DateAdapter<Date>) {
this.dateAdapter.setLocale('fr-br');
}
}
J'ai finalement trouvé la réponse: Après avoir généré le dossier dist .
pushstate: enabled
pushstate enabled maintient les URL visibles du navigateur propres pour les applications JavaScript côté client qui desservent plusieurs itinéraires. Par exemple, le routage pushstate autorise un itinéraire de fichier JavaScript unique vers plusieurs URL marquées par une ancre et qui ressemblent à/some/path1 au lieu de/some # path1.
pour ceux qui n'utilisent pas Staticfile, vous pouvez essayer ceci.
J'ai eu le même problème avec nginx servant angular . Ce qui suit est le fichier de configuration par défaut, probablement trouvé quelque part dans/etc/nginx/sites-available/yoursite
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
mais ce que nous voulons réellement, c’est ...
location / {
# First attempt to serve request as file, then
# as directory, then redirect to index(angular) if no file found.
try_files $uri $uri/ /index.html;
}
Dans votre fichier nginx.conf
, essayez d’utiliser:
try_files $uri $uri/ /index.html;
au lieu de:
try_files $uri $uri/ =404;
Cela a fonctionné pour moi sur le projet Angular 5.
Ceci est un problème avec le côté serveur et non le côté Angular. Il incombe aux serveurs de renvoyer l'index ou la page de destination pour chaque demande de votre cas nginx
.
METTRE &AGRAVE; JOUR
Si vous n'avez absolument pas de serveur ou de serveur sur lequel vous pouvez le configurer, il existe deux solutions de contournement.
HashLocationStrategy
en angulaireLes applications angulaires sont des applications à une seule page. Lorsque vous tapez l'adresse manuellement, vous essayez de vous rendre à un emplacement où l'application n'est pas en cours d'exécution.
Vous devez modifier nginx config pour l’acheminer vers votre page de base.