如何使用Angular pushstate URL抛出真实的404或301

sup*_*ary 16 seo http-status-code-404 pushstate angularjs angular-routing

我正在使用$ routeProvider和$ locationProvider在单页面应用程序(SPA)中处理pushstate URLS,如下所示:

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;
    });
  });
Run Code Online (Sandbox Code Playgroud)

URL用于从服务器提取可能存在或不存在的内容.

如果这是一个普通的多页面网站,对丢失内容的请求将触发来自服务器的404标头响应,并且对移动内容的请求将触发301.这将提醒谷歌丢失或移动的内容.

比方说,我点击了这样一个URL:

http://example.com/pet/123456

并且说数据库中没有这样的宠物,我的SPA如何在该内容上返回404.

如果没有这个,是否有其他方法可以正确地提醒用户或搜索引擎所请求的URL不存在?还有其他一些我不考虑的解决方案吗?

a b*_*ver 4

真正的问题是是否会http://example.com/pet/123456返回任何东西?

如果你的起点是http://example.com/并且有一个链接,http://example.com/pet/123456那么 Angular 将调用 ,而petController后者又对 进行 AJAX 调用http://example.com/api/pet/123456

爬虫不会这样做,而是会尝试http://example.com/pet/123456直接调用。

因此您的服务器必须能够处理该调用。如果没有带有该 id 的宠物,123456则应返回 404。问题已解决。如果有则应返回 SPA。然后应用程序应该相应地处理这种情况。