0

我想了半天怎么问这个问题。如果标题不够清楚,请见谅。

所以我有一个单页应用程序,其中所有路由都在 JavaScript (AngularJS) 中完成。从服务器我根据需要只返回部分 HTML。现在我想确保 Google 可以使用 _escaped_fragment_ 索引我的应用程序。例如,在我的应用程序中,我有一个 URL:

http://example.com/user/profile/a

这将变成:

http://example.com/?_escaped_fragment_=user/profile/a

当谷歌索引我时。这意味着所有请求都将通过我的 IndexHandler 来决定如何处理它。

在 IndexHandler 中,我想以某种方式获取处理“/user/profile/a”的类,这样我就可以在其上调用特殊方法来返回页面的完整 HTML(不是部分)。

伪代码看起来像这样:

 class IndexHandler(webapp2.RequestHandler):

    def get(self):

        # In my example this would return 'user/profile/a'
        fragment = self.request.GET.get('_escaped_fragment_', '')

        if fragment:
            fragment = '/' + fragment

            # This is something I have no idea how to do
            clas_Im_looking_for = XXXX(fragment).get_handler()

            response = webapp2.Response()
            handler = clas_Im_looking_for(request, response)

            # Fragment get is my method
            response = handler.fragment_get()

谢谢!

4

1 回答 1

0

我不是 SEO 专家,但我建议使用 301 重定向将传入请求重定向到“友好 URL”。通过这种方式,您可以确保漂亮的 URL 被编入索引,因此任何找到您的网站的人也将使用那里的 URL 来访问您的应用程序。

您应该确保这些 URL 以对用户有意义的方式响应...

这也解决了您分配正确的处理程序来处理 URL 的问题。你的应用程序知道如何做到这一点。由于您现在处于应用程序的特定处理程序中,因此您实际上已经深入了解路由。

可能有一种方法可以在处理程序代码中使用反向引用顶级应用程序对象self.app或使用类似的东西webapp2.get_app()来获取应用程序对象,然后使用路由器来匹配正确的处理程序(在此处记录)

然而,重定向解决方案更优雅:

class IndexHandler(webapp2.RequestHandler):

    def get(self):

        # In my example this would return 'user/profile/a'
        fragment = self.request.GET.get('_escaped_fragment_', '')

        if fragment:
            fragment = '/' + fragment
            self.redirect(fragment, permanent=True) 
于 2013-04-09T20:01:45.963 回答