我正在研究一个主要由静态内容组成的GAE应用程序。我配置了以下处理程序:
- 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
这样的普通URL,并提供相应的HTML文件。
现在,如果没有相应的URL静态文件,GAE将返回一个空页面。我想为这些案例设置一个自定义的404页面,但显然这并不简单。
对类似问题的回答建议放一个" catch-all"我的app.yaml
底部的处理程序,RequestHandler
生成错误页面。
不过,/content/(.+)
会匹配/content/
下的所有网址,无论是否有效,这意味着这样的处理程序不会被调用。
我只能想到另外两个解决方案:
是否有另一种方法可以为此案例设置合适的404页面?
答案 0 :(得分:1)
为那些认为有用的人提供一个旧线程。
添加require_matching_file: true
作为处理程序的最后一个属性。
如果没有相应的文件,则将调用瀑布中的下一个处理程序,而不是生成默认的404
页面。
然后在app.yaml
的底部添加一个具有处理无效URL的动态处理程序的新的全包部分
示例:
- url: /content/(.*\..*)
static_files: static/content/\1
upload: static/content/(.*)
require_matching_file: true
- url: /content/(.+)
static_files: static/content/\1.html
upload: static/content/(.*)\.html
require_matching_file: true
- url: /.*
script: auto
这样,GAE将通过前2个处理程序为所有现有的静态资产提供服务。仅对不存在的URL调用动态处理程序。您显然需要为此编写代码...
此处有一个重要的免责声明:require_matching_file
未记录。但是事实证明,GAE在您上载该字段时会自动将其添加到您的app.yaml
中。
答案 1 :(得分:-1)
尝试'error_handlers'。
error_handlers:
- file: custom_404.html
从GAE App.yaml documentation - 每个文件条目表示应该提供的静态文件来代替通用错误响应。如果指定的文件元素没有相应的error_code元素,则静态文件将成为应用程序的默认错误页面。