我在GAE上使用其他地方找到的提示设置了静态网站,但无法弄清楚如何返回404错误.我的app.yaml文件看起来像
- url: (.*)/ static_files: static\1/index.html upload: static/index.html - url: / static_dir: static
将所有静态html/jpg文件存储在静态目录下.以上适用于存在的文件,但如果不存在,则返回空长文件.答案可能是编写一个python脚本来返回404错误,但是如何设置为现有的静态文件提供服务但是为不存在的文件运行脚本呢?
以下是在开发应用程序服务器上获取不存在的文件(nosuch.html)的日志:
ERROR 2008-11-25 20:08:34,084 dev_appserver.py] Error encountered reading file "/usr/home/ctuffli/www/tufflinet/static/nosuch.html": [Errno 2] No such file or directory: '/usr/home/ctuffli/www/tufflinet/static/nosuch.html' INFO 2008-11-25 20:08:34,088 dev_appserver.py] "GET /nosuch.html HTTP/1.1" 404 -
Alexander Ko.. 37
您需要注册一个catch-all脚本处理程序.将其添加到app.yaml的末尾:
- url: /.* script: main.py
在main.py中,您需要输入以下代码:
from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app class NotFoundPageHandler(webapp.RequestHandler): def get(self): self.error(404) self.response.out.write('') application = webapp.WSGIApplication([('/.*', NotFoundPageHandler)], debug=True) def main(): run_wsgi_app(application) if __name__ == "__main__": main()
替换
为有意义的东西.或者更好地使用模板,您可以在这里阅读如何做到这一点.
如果您在设置时遇到问题,请告诉我.
您需要注册一个catch-all脚本处理程序.将其添加到app.yaml的末尾:
- url: /.* script: main.py
在main.py中,您需要输入以下代码:
from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app class NotFoundPageHandler(webapp.RequestHandler): def get(self): self.error(404) self.response.out.write('') application = webapp.WSGIApplication([('/.*', NotFoundPageHandler)], debug=True) def main(): run_wsgi_app(application) if __name__ == "__main__": main()
替换
为有意义的东西.或者更好地使用模板,您可以在这里阅读如何做到这一点.
如果您在设置时遇到问题,请告诉我.
谷歌应用引擎现在有自定义错误响应
所以你现在可以在你的app.yaml中添加一个error_handlers部分,如下例所示:
error_handlers: - file: default_error.html - error_code: over_quota file: over_quota.html
在不需要任何CPU周期的情况下执行此操作的一种非常简单的方法是将此处理程序放在app.yaml的底部
- url: /.* static_files: views/404.html upload: views/404.html
然后,您可以在视图目录中放置一个静态404.html文件.不需要python处理程序.app.yaml中未处理的任何内容都已经达到了.