sto usando $ routeProvider e $ locationProvider per gestire URL pushState in una singola pagina app (SPA), qualcosa di simile:Come faccio butto un vero e proprio 404 o 301 con un URL pushState angolare
angular.module('pets', [])
.config(function($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider.when('/pet/:petId', {
controller: 'petController'
});
})
.controller('petController', function($scope, petService, $routeParams){
petService.get('/api/pets/' + $routeParams.petId).success(function(data) {
$scope.pet = data;
});
});
L'URL viene utilizzato per estrarre il contenuto dal server che può o non può esistere.
Se si trattava di un sito Web a più pagine ordinario, una richiesta di contenuto mancante avrebbe attivato una risposta dell'header 404 dal server e una richiesta di contenuto spostato avrebbe attivato un 301. Ciò avviserebbe Google del contenuto mancante o spostato.
diciamo per esempio mi ha colpito un URL simile a questo:
http://example.com/pet/123456
e dire non c'è tale animale domestico nel database, come può il mio SPA restituire un 404 su quel contenuto.
In caso contrario, esiste un altro modo per avvisare correttamente l'utente o il motore di ricerca che l'URL richiesto non esiste? C'è qualche altra soluzione che non sto considerando?
Se il server restituisce un codice di stato esterno all'intervallo 200, la chiamata 'get' deve essere rifiutata e passata al callback' error': '.success (cb) .error (cb)'. È quello che stai cercando? –
@DavinTryon - non proprio, posso prendere il 404 dalla richiesta AJAX senza problemi, la domanda è cosa fare con esso allora. In un'applicazione multi-pagina restituirei un codice di stato 404 nell'intestazione della risposta. Ovviamente non posso farlo in una SPA. Per un utente posso semplicemente rendere un bel testo 404, ma come faccio ad avvisare un crawler che la pagina non è lì. – superluminary
Immagino che la domanda possa essere estesa a qualsiasi chiamata AJAX? In altre parole, come indicare a un crawler che una chiamata AJAX (che restituisce il contenuto da renderizzare) restituisce un 404? –