我正在使用$ 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; }); });
该URL用于从可能存在或可能不存在的服务器中拉取内容。
如果这是一个普通的多页网站,那么对于缺少内容的请求将触发服务器的404标头响应,并且移动内容的请求将触发301.这将提醒Google丢失或移动的内容。
比方说我点击这样的URL:
http://example.com/pet/123456
真正的问题是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。应用程序应该相应地处理这种情况。