AngularJS html5mode et hard 404

J'ai une application AngularJS fonctionnant avec html5mode réglé sur true .

À l'heure actuelle, l'application affiche une page soft de 404, avec le réglage de l'autre dans le routeur.

Existe-t-il une façon de pouvoir répondre à la réponse 404 HTTP réelle, pour des raisons de référencement lors de l'utilisation de html5mode?

Si je comprends bien ce que vous voulez, vous devez faire ce qui suit:

  1. Redirige fortement le navigateur (contournant le routage angulaire) sur le chemin autrement, avec quelque chose comme ceci:

     $routeProvider .otherwise({ controller: function () { window.location.replace('/404'); // your custom 404 page // or a non existing page } }); 
  2. Si vous avez une application régulière d'une seule page où toute la demande du serveur est redirigée vers le même point d'entrée SPA, vous devez configurer sur votre serveur pour faire une exception de routage pour votre page 404 personnalisée, qui devrait également être diffusée avec un 404 statut.

Sinon, je ne peux pas voir comment vous le feriez avec juste API Historique, sans requête externe, car tout le point dans le routage angulaire est de contourner les requêtes externes.

Si vous voulez juste des routes non existantes pour renvoyer 404, vous devez configurer votre serveur pour qu'il corresponde à toutes vos routes angulaires et renvoyer 404 autrement.

Seach engines fonctionne avec des applications SPA via des pages prerendered, en utilisant _escaped_fragment_. Et vous pouvez utiliser Prerender.io (ou simplement PhantomJS) pour générer des codes d'état pour les moteurs de recherche, comme ceci https://prerender.io/documentation/best-practices

Mais ce schéma est obsolète par Google: http://googlewebmastercentral.blogspot.ru/2015/10/deprecating-our-ajax-crawling-scheme.html En ce moment, Google essaie de comprendre votre JS avec un schéma d'exploration habituel.

La redirection dure à la page 404.html n'est pas une bonne pratique: l'URL doit rester identique, comme https://stackoverflow.com/somepage

Vous pouvez essayer Angular2 avec la fonctionnalité de rendu du serveur: https://docs.google.com/document/d/1q6g9UlmEZDXgrkY88AJZ6MUrUxcnwhBGS0EXbVlYicY/edit