prerender.io的问题总是呈现客户端路由列表的默认角度路由

时间:2014-06-08 06:22:19

标签: asp.net-mvc angularjs seo prerender

只是想说我真的很喜欢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="!">

在我的所有页面的头部,如果这很重要。

1 个答案:

答案 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);
        }
相关问题