我可以让Angularjs使用不同的控制器进行Facebook OpenGraph Scraper吗?



我有一个使用 http-server

使用的angularJS应用程序

我希望我的元标签(og:titleog:descriptionog:image(动态填充 Facebook 和其他刮刀(如Slack(,以在社交媒体网站上发布丰富的链接。但是,这很棘手,因为这些刮刀会在角度插入正确的值之前对原始HTML页面进行刮擦。因此,刮刀看到了占位符的价值。

在此描述了一个解决此问题的解决方案。基本上:将Scraper-bots静态HTML馈送为所需的og字段。我想这样做。但是与那个作者不同,我不使用apache。在http-server中,我知道没有.htaccess文件。M

i使用 ui-router $state-provider来处理这样的URL,例如:

  $stateProvider.state('splash',
      {
          url: '/',
          templateUrl: 'html/splash.html',
          controller: 'SplashCtrl',
          data: {
              meta: {
                'title': 'My Title',
                'description': 'My Description'
              }
          }
      }
  );

是否有某种方法可以创建一个状态,以便使用Web浏览器将刮刀机器人发送给与普通人用户不同的控制器?如何?

我们的Web应用程序之一也有同样的问题。我们通过进行以下一些更改来解决它。它涉及对前端和后端进行更改。

在这种情况下,第一个问题是,Angular使用/#/作为分离器来确定路由和历史记录。如果您共享具有# char的链接,则将其忽略而不会发送到服务器。要动态生成社交网站的元数据,我们需要#之后的部分。因此,我们完全消除了/#/

angular.module('myApp', [])
    .config(function($locationProvider) {
        $locationProvider.html5Mode(true);  // 
    });

参考:https://docs.angularjs.org/api/ng/provider/qunpocationprovider

设置此设置将确保您的URL现在将从http://app_host/#/my_url更改为http://app_host/my_url

只是为了确保Angularjs现在了解如何解释其路线,您需要为应用程序设置基本路径

<html>
    <head>
        <base href="/">
    </head>
</html>

使用此配置,您的可共享链接现在将降落在您的后端服务器上,您始终返回相同的index.html文件,但是使用Dynamic Meta标记基于您收到的额外路径参数。

最新更新