首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何抛出具有角度推状态URL的真实404或301

如何抛出具有角度推状态URL的真实404或301
EN

Stack Overflow用户
提问于 2015-01-06 19:14:58
回答 3查看 8.9K关注 0票数 16

我正在使用$routeProvider和$locationProvider在一个单页面应用程序中处理推状态URLS,如下所示:

代码语言:javascript
复制
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

如果数据库中没有这样的宠物,我的SPA怎么能对该内容返回404。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-09 23:15:12

真正的问题是http://example.com/pet/123456到底返回什么了吗?

如果您的起点是http://example.com/,并且有一个到http://example.com/pet/123456的链接,那么Angular将调用petController,而后者又会向http://example.com/api/pet/123456发出AJAX调用。

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

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

票数 4
EN

Stack Overflow用户

发布于 2015-07-08 05:56:14

根据此答案How do search engines deal with AngularJS applications?,您应该使用Headless Browser来处理爬虫请求,并使用适当的响应码返回页面快照。https://developers.google.com/webmasters/ajax-crawling/docs/html-snapshot

谷歌的例子不包括301,302或404个案例。但是,可以修改它们的代码以分析快照的内容并更改响应代码。

我发现prerender.io提供了这项服务,但它不是免费的。但是,如果你的页面少于250页,他们有一个免费的计划。Prerender要求在404或301的情况下,向DOM添加一个meta标记。

代码语言:javascript
复制
<meta name="prerender-status-code" content="404">

这个元标签然后被他们的无头浏览器检测到,并且响应码被改变。

票数 3
EN

Stack Overflow用户

发布于 2015-01-08 21:57:26

尝尝这个

代码语言:javascript
复制
angular.module('pets', [])

  .config(function($routeProvider, $locationProvider) {
    $locationProvider.html5Mode(true);
    $routeProvider.when('/pet/:petId', {
      controller: 'petController'
    }). otherwise({ yourUrl:'/404.html'}) // Render 404 view;
  })

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27797454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档