Python 在Google Appengine的app.yaml中定义查询参数
我想根据查询参数提供静态文件。更具体地说,我想为搜索引擎优化提供预渲染快照。这些页面托管在Google Appengine上,所以我使用app.yaml来定义这些URLPython 在Google Appengine的app.yaml中定义查询参数,python,google-app-engine,app.yaml,Python,Google App Engine,App.yaml,我想根据查询参数提供静态文件。更具体地说,我想为搜索引擎优化提供预渲染快照。这些页面托管在Google Appengine上,所以我使用app.yaml来定义这些URL handlers: # Consider anything matching a dot static content. - url: /(.*\..*)$ static_files: dist/\1 upload: dist/(.*\..*)$ # Serve snapshots for seo - url: /?_
handlers:
# Consider anything matching a dot static content.
- url: /(.*\..*)$
static_files: dist/\1
upload: dist/(.*\..*)$
# Serve snapshots for seo
- url: /?_escaped_fragment_=(.*)
static_files: dist/snapshots/\1
upload: dist/(.*)$
# Otherwise let Angular handle it.
- url: /(.*)
static_files: dist/index.html
upload: dist/index.html
但是,当我使用查询参数
获取url时,会触发最后一个url处理程序。可以在URL中定义查询参数吗?如果是这样的话,我做错了什么?我很高兴被证明是错的,但我很确定在通过app.yaml
发送时没有考虑查询参数。我遇到了完全相同的问题。应用程序引擎没有添加对静态查询参数进行调度的功能,这有点蹩脚。。。无论如何
import webapp2, urllib, logging, json, os
dp = os.path.dirname(os.path.realpath(__file__))
fp = os.path.join(dp, "resources", 'index.html')
w = open(fp, 'r').read()
class Fragment(webapp2.RequestHandler):
def get(self, pathname):
if '_escaped_fragment_' in self.request.arguments():
CODE_GOES_HERE_FOR_BUILDING_YOUR_FRAGMENT_RESPONSE
else:
self.response.write(w)
application = webapp2.WSGIApplication(
[('/(.*)', Fragment)],
debug=True)
这段代码基本上猜测您是否在\u escaped\u fragment\u
查询参数上进行调度,并相应地修改输出。我不知道这比将index.html
放在static\u文件中要少多少(如果有的话):app.yaml
处理程序中的index.html
你试图获取的url是什么?谷歌机器人会获取任何url。例如,我定义了/support
,所以googlebot将获取/?\u转义\u片段\u=support
。它是一个AngularJS站点,因此/?\u escape\u fragment\u=support
应该获取一个预呈现的html文件以对其进行索引。解决方法是创建一个处理程序,该处理程序要么返回dist/index.html(当escape\u fragment不在查询字符串中时),要么返回给定escape\u fragment的snapshop html。我不知道以这种方式提供服务需要多少额外的费用。我本来希望得到一个答案,但不幸的是,我认为这个答案是正确的。当我仍然有问题的时候,我已经建立了类似的东西。如今,谷歌为JavaScript呈现的页面编制索引,使得\u转义的\u片段
响应不那么重要。(对其他搜索引擎仍然有用。)好的观点。不幸的是,我仍然有一个动态站点,除非您使用javascripting UI元素,否则大部分内容不会显示,因此转义的_片段在我的特定情况下仍然很有用。但是,是的,我同意,如果你的大部分内容显示在最初的javascript呈现上,那么谷歌可能会处理得很好。