我遇到了一个问题,我的angular应用程序如何加载。由于某些原因,不管路由如何,当在线查看应用程序时,html结构默认为基路径。
现在假设在我的路由中我有两个页面:home(/)
和events(/events)
。
当我尝试使用facebook打开图形抓取器或甚至只是简单地view-source:https://mysite/events
时,我看到的结果是主页(/)
而不是/events
更令人困惑的是
dist
目录中实际呈现的/events
html文件具有正确的html数据,但在在线查看或如上所述的废弃时,它显示主页html结构- 甚至在浏览器上加载
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
这样的刮刀器会在主索引文件中找到元标签数据,而不是在事件索引文件