2016-05-06 41 views
2

我正在开发一个GAE应用程序,主要由静态内容组成。我已经配置了以下处理:Google App Engine自定义404页面用于静态文件

- url: /content/(.*\..*) 
    static_files: static/content/\1 
    upload: static/content/(.*) 

- url: /content/(.+) 
    static_files: static/content/\1.html 
    upload: static/content/(.*)\.html 

第一处理程序用于投放图像,样式表等;第二个处理普通网址,如/content/zoo/monkeys/george,并提供相应的HTML文件。

现在,如果URL没有相应的静态文件,GAE正在返回一个空白页面。我想为这些情况设置一个自定义的404页面,但显然这不是直截了当的。

类似问题的答案建议在我的app.yaml的底部放置一个“全部抓取”处理程序,并使用生成错误页面的RequestHandler。 然而,/content/(.+)匹配/content/下的所有URL,有效与否,这意味着这样的处理程序不会被调用。

我只能想其他两种解决方案:

  1. 路由所有通过动态处理程序,它写出内容有效的URL或无效者一个错误页面的请求。我不喜欢这样,因为它比让GAE提供静态文件效率低得多。
  2. 声明一个单独的静态处理程序,它明确地匹配每个静态文件,然后在底部放置一个“全部捕获”处理程序 - 我也不喜欢这样,因为它会导致一长串处理程序。

有没有另外一种方法来为这种情况设置一个合适的404页面?

+0

我想你已经把自己涂在角落里了。 Appengine并没有考虑到这个用例。 –

回答

-1

尝试'error_handlers'。

error_handlers: 
- file: custom_404.html 

GAE App.yaml documentation - 每个文件条目表明应该在的地方一般错误响应来提供的静态档案。如果您指定的文件元素没有对应的error_code元素,则该静态文件将成为您应用程序的默认错误页面。

+2

'error_handlers'不适用于404。 –