谷歌应用引擎和404

2024-09-25 00:31:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在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 -

Tags: 文件pydev脚本urlhomeindexusr
3条回答

在不需要任何CPU周期的情况下,一个非常简单的方法是将这个处理程序放在app.yaml的底部

- url: /.*
    static_files: views/404.html
    upload: views/404.html

这样就可以在views目录中放置一个静态的404.html文件。不需要python处理程序。你的app.yaml中未处理的任何内容都会受到影响。

谷歌应用引擎现在有Custom Error Responses

因此,您现在可以向app.yaml添加一个error\u handlers部分,如下例所示:

error_handlers:

- file: default_error.html

- error_code: over_quota
    file: over_quota.html

您需要注册一个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('<Your 404 error html page>')

application = webapp.WSGIApplication([('/.*', NotFoundPageHandler)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

用有意义的东西替换<Your 404 error html page>。或者最好使用模板,您可以阅读如何做到这一点here

请让我知道如果你有问题设置这个。

相关问题 更多 >