我有一个全能的'像这样的错误处理程序的正则表达式:
(r'/.*', errors.Error)
列在之后所有其他人,为了匹配"其他所有"。
当页面不存在时,这可以正常失败。
但是,我还有一个静态文件目录,上传如下:
handlers:
- url: /files
static_dir: files
因此,如果我尝试在/files/
中加载与该目录中的现有文件不对应的URL,我会得到:
错误:未找到
在此服务器上找不到请求的网址。
无需列出要单独上传的每个文件,如何捕获此错误;理想情况下,上面使用相同的处理程序errors.Error
?
答案 0 :(得分:3)
不幸的是,没有好办法做到这一点。功能请求位于:https://code.google.com/p/googleappengine/issues/detail?id=8380&q=type%3DFeature%20error%20404&colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log
由于static_dir
中没有文件,因此无法为404配置自定义处理程序或静态错误页面。如果URL匹配子路径下的任何内容({1}},则static_files
也是如此:
static_dir
URL路径与特殊静态处理程序的URL模式匹配。然后静态处理程序意识到所请求的文件不存在。 Control不会返回到路由逻辑,也没有机会自定义静态处理程序的响应。静态处理程序仅返回通用404。
如果handlers:
- url: /files/(.*)
static_files: files/\1
upload: files/.*
的网址格式与现有的文件名完全匹配,那么不匹配的网址路径将落入后续处理程序,包括底层的全能。但这有效地列出了配置文件中的所有静态文件:
static_files
同样不幸的是,handlers:
- url: /files/(foo.png|bar.js|baz.css)
static_files: files/\1
upload: files/.*
- url: .*
script: errorhandler.app
# Or for a static error page:
- url: .*
static_files: error.html
upload: error.html
没有帮助,因为它还不支持自定义404。值得注意的是,如果error_handlers:
中没有一个与URL匹配,则App Engine返回的404也是通用的,但也无法进行自定义。
完全满足此要求而不在处理程序的URL模式中列出静态文件名的唯一方法是不使用静态文件,而是使用应用程序处理程序从应用程序文件中提供静态数据(并提供自定义404消息)如果没有找到)。
handlers:
答案 1 :(得分:0)
捕获404就像下面的代码行一样简单
app.error_handlers[404] = handle_404
其中 handle_404 是一种处理异常的def方法+你不会'需要"全能"正则表达式。
请参阅本指南,详细了解" WSGI应用中的例外情况"部分:https://webapp-improved.appspot.com/guide/exceptions.html
另请参阅app.yaml
error_handlers 参数。 See more here