Angular服务器端渲染(SSR)不为内部/子页面加载html



我遇到了一个问题,我的angular应用程序如何加载。由于某些原因,不管路由如何,当在线查看应用程序时,html结构默认为基路径。

现在假设在我的路由中我有两个页面:home(/)和events(/events)

当我尝试使用facebook打开图形抓取器或甚至只是简单地view-source:https://mysite/events时,我看到的结果是主页(/)而不是/events

更令人困惑的是

  1. dist目录中实际呈现的/eventshtml文件具有正确的html数据,但在在线查看或如上所述的废弃时,它显示主页html结构
  2. 甚至在浏览器上加载https://mysite/events时-正确显示预期页面,但在ctrl + u检查时,同样的问题-属于主页的html结构

这是否与angular加载应用程序的方式有关,还是与其他东西有关?我如何才能确保拾取器或甚至只是通过查看源来拾取正确的html数据?

如果路由信息可能有帮助,这里是:

const routes: Routes = [
{
path: '',
component: SiteLayoutComponent,
children: [
{
path: 'events',
children: [
{ path: '', component: EventsComponent},
]
},
{ path: '', component: HomeComponent, pathMatch: 'full'},
]
},
{ path: '**', redirectTo: '' }
];

我认为你可以使用EventComponent路由,除了HomeComponent。

const routes: Routes = [
{
path: '',
component: SiteLayoutComponent,
},
{
path: 'events',
component: EventsComponent,
},
{ path: '**', redirectTo: '' }
];

我在本地apache服务器和另一个站点(原来是使用apache)上测试了web应用程序,路由在两种情况下都能正常工作。

所以问题原来是一个nginx配置,重定向请求到根索引(然后到请求的页面),而不是直接到子目录索引。

所以如果你有一个像site.com/events这样的请求,在nginx上,请求会加载主index.html,然后以编程方式加载用户的请求(/events),而在apache上,它会直接到/events中的索引

这就解释了为什么像open graph scraper甚至ctrl + u这样的刮刀器会在主索引文件中找到元标签数据,而不是在事件索引文件