2012-09-06 49 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