2012-09-06 116 views
1

我对GAE相对较新,而且我在理解URL映射时遇到了一些困难。app.yaml网址配置谷歌应用程序引擎

我有一组数据是静态的(HTML模板,登录表单,JS等),这是动态的部分。

我目前的app.yaml具有如下:

handlers: 
- url: /.* 
    static_dir: /static 
- url: /service/.* 
    script: _go_app 
    login: required 

的这里的想法是,http://myapp/service/foo将向应用程序,以及其他任何类似http://myapp/foo.html路线应该成为/static/foo.html。但是,我收到了静态请求404错误。

想法?

回答

4

按照documentation

网址:URL前缀。此值使用正则表达式语法(因此必须转义正则表达式特殊字符),但不应包含分组。以此前缀开头的所有URL均由此处理程序处理,并将前缀之后的部分URL用作文件路径的一部分。

在你的情况,因为您指定url: /.*,前缀将foo.html,并获取该文件将有一个空的文件名。

此外,因此您需要更改顺序的处理程序进行评估从上到下。

handlers: 
- url: /service/.* 
    script: _go_app 
    login: required 
- url:/
    static_dir: static 
+1

明白了。谢谢! – PaulProgrammer

-1

一个static_dir指令给定的正则表达式匹配的前缀后的名称提供文件服务。如果RE在.*结束,则整个URL将被视为前缀,因此将不会有任何东西用作文件路径。

尝试url: /代替。

此外,处理程序按顺序匹配。

正则表达式匹配/.*您可以收到请求的所有URL,所以以后任何它永远不会匹配。把它放在最后。

+0

我根据这个建议进行了更改,现在我得到了一个不同的错误。它仍然是404,但是日志内容如下:'[Errno 2]没有这样的文件或目录:'\\ static \\ foo.html'我试着把“static”目录放在根目录'/static'下,应用程序脚本是'/hello/static'。不知道项目在哪里生根.... – PaulProgrammer

2

顺序很重要,所以你/服务/处理器很可能永远不会被调用,除非你将它的静态处理程序上面。此外,404s是由静态声明中的错误语法引起的。改变你的处理程序:

handlers: 
- url: /service/.* 
    script: _go_app 
    login: required 
- url:/
    static_dir: static