我有一个使用 http-server
使用的angularJS应用程序我希望我的元标签(og:title
,og:description
,og: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标记基于您收到的额外路径参数。