只是想说我真的很喜欢prerender.io,但我现在遇到了问题,我想知道是否我做错了什么,而且有更多服务经验的人可以帮助我。
我在prerender.io网站上遇到了同样的问题,并且在我使用prerender进行本地执行的Debian Linux盒子中遇到了同样的问题。
我的新网站是ASP.Net MVC和angular的混合体,其中angular表示服务器上MVC路由中的工作流程(或内容类别)。
一类内容的例子是:
http://[somesitename]/PublicContent/#!/news
http://[somesitename]/PublicContent/#!/welcome
MVC服务器端路由是:
http://[somesitename]/PublicContent
和#!/ news 和#!/ welcome 是有角度的应用路线,欢迎也是默认路线。
当我将URL发送到prerender.io服务或我的本地实例时:
http://service.prerender.io/http://[somesitename]/PublicContent/#!/news
prerender服务只会呈现:
http://[somesitename]/PublicContent
并忽略了#!
之后的客户端路线因此,对于每个MVC路由的所有页面,我只是获取多次呈现的默认路由...
这是prerender.io的错误吗?或者我没有没有正确配置的东西?
我确实有:
<meta name="fragment" content="!">
在我的所有页面的头部,如果这很重要。
答案 0 :(得分:6)
与prerender.io上的人交谈,看来我对Asp.Net MVC中间件进行了修改,完全删除?_ escpaed_fragment _ = / 是对此的不正确修改代码本身不正确(删除了基本代码?_ escpaed_fragment _ = / 并将其替换为空,我修改了代码以删除?_ escpaed_fragment _ = / 并将其替换为<强>#!强>)。
prerender.io服务期望?_ escpaed_fragment _ = / 存在于网址中,如果找到它,则会在调用您的网站进行缓存之前将其替换为#!这页纸。它不希望找到#!,因此如果它存在,它将无法正确处理该URL。
因此,如果您使用的是Asp.Net MVC中间件,则应该从 PrerenderModule.cs 中注释掉以下代码:
// Remove the _escaped_fragment_ from the URL if it exists!
var escapedFull = "?" + _Escaped_Fragment + "=/";
if (url.Contains(escapedFull))
{
url = url.Replace(escapedFull, string.Empty);
}