Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
GAE: App.yaml designed for serving a static site on Google App Engine (Python). Copy your static html and files into a folder called "static" next to app.yaml. Contains a bunch of mimetype declarations from html5boilerplate's .htaccess. May not be neces

App.yaml designed for serving a static site on Google App Engine (Python). Copy your static html and files into a folder called "static" next to app.yaml. Contains a bunch of mimetype declarations from html5boilerplate's .htaccess. May not be necessary for most situations.

my_site
  app.yaml
  static
    index.html
    ...

The static folder is invisible when serving (i.e. my_site/static/index.html is accessed as http://your-app-name-here.appspot.com/index.html.

Remember: No spaces in file or path names. Case sensitive.

application: you-app-name-here
version: 1
runtime: python
api_version: 1
default_expiration: "30d"
handlers:
- url: /(.*\.(appcache|manifest))
mime_type: text/cache-manifest
static_files: static/\1
upload: static/(.*\.(appcache|manifest))
expiration: "0m"
- url: /(.*\.atom)
mime_type: application/atom+xml
static_files: static/\1
upload: static/(.*\.atom)
expiration: "1h"
- url: /(.*\.crx)
mime_type: application/x-chrome-extension
static_files: static/\1
upload: static/(.*\.crx)
- url: /(.*\.css)
mime_type: text/css
static_files: static/\1
upload: static/(.*\.css)
- url: /(.*\.eot)
mime_type: application/vnd.ms-fontobject
static_files: static/\1
upload: static/(.*\.eot)
- url: /(.*\.htc)
mime_type: text/x-component
static_files: static/\1
upload: static/(.*\.htc)
- url: /(.*\.html)
mime_type: text/html
static_files: static/\1
upload: static/(.*\.html)
expiration: "1h"
- url: /(.*\.ico)
mime_type: image/x-icon
static_files: static/\1
upload: static/(.*\.ico)
expiration: "7d"
- url: /(.*\.js)
mime_type: text/javascript
static_files: static/\1
upload: static/(.*\.js)
- url: /(.*\.json)
mime_type: application/json
static_files: static/\1
upload: static/(.*\.json)
expiration: "1h"
- url: /(.*\.m4v)
mime_type: video/m4v
static_files: static/\1
upload: static/(.*\.m4v)
- url: /(.*\.mp4)
mime_type: video/mp4
static_files: static/\1
upload: static/(.*\.mp4)
- url: /(.*\.(ogg|oga))
mime_type: audio/ogg
static_files: static/\1
upload: static/(.*\.(ogg|oga))
- url: /(.*\.ogv)
mime_type: video/ogg
static_files: static/\1
upload: static/(.*\.ogv)
- url: /(.*\.otf)
mime_type: font/opentype
static_files: static/\1
upload: static/(.*\.otf)
- url: /(.*\.rss)
mime_type: application/rss+xml
static_files: static/\1
upload: static/(.*\.rss)
expiration: "1h"
- url: /(.*\.safariextz)
mime_type: application/octet-stream
static_files: static/\1
upload: static/(.*\.safariextz)
- url: /(.*\.(svg|svgz))
mime_type: images/svg+xml
static_files: static/\1
upload: static/(.*\.(svg|svgz))
- url: /(.*\.swf)
mime_type: application/x-shockwave-flash
static_files: static/\1
upload: static/(.*\.swf)
- url: /(.*\.ttf)
mime_type: font/truetype
static_files: static/\1
upload: static/(.*\.ttf)
- url: /(.*\.txt)
mime_type: text/plain
static_files: static/\1
upload: static/(.*\.txt)
- url: /(.*\.unity3d)
mime_type: application/vnd.unity
static_files: static/\1
upload: static/(.*\.unity3d)
- url: /(.*\.webm)
mime_type: video/webm
static_files: static/\1
upload: static/(.*\.webm)
- url: /(.*\.webp)
mime_type: image/webp
static_files: static/\1
upload: static/(.*\.webp)
- url: /(.*\.woff)
mime_type: application/x-font-woff
static_files: static/\1
upload: static/(.*\.woff)
- url: /(.*\.xml)
mime_type: application/xml
static_files: static/\1
upload: static/(.*\.xml)
expiration: "1h"
- url: /(.*\.xpi)
mime_type: application/x-xpinstall
static_files: static/\1
upload: static/(.*\.xpi)
# image files
- url: /(.*\.(bmp|gif|ico|jpeg|jpg|png))
static_files: static/\1
upload: static/(.*\.(bmp|gif|ico|jpeg|jpg|png))
# audio files
- url: /(.*\.(mid|midi|mp3|wav))
static_files: static/\1
upload: static/(.*\.(mid|midi|mp3|wav))
# windows files
- url: /(.*\.(doc|exe|ppt|rtf|xls))
static_files: static/\1
upload: static/(.*\.(doc|exe|ppt|rtf|xls))
# compressed files
- url: /(.*\.(bz2|gz|rar|tar|tgz|zip))
static_files: static/\1
upload: static/(.*\.(bz2|gz|rar|tar|tgz|zip))
# index files
- url: /(.+)/
static_files: static/\1/index.html
upload: static/(.+)/index.html
expiration: "15m"
- url: /(.+)
static_files: static/\1/index.html
upload: static/(.+)/index.html
expiration: "15m"
# site root
- url: /
static_files: static/index.html
upload: static/index.html
expiration: "15m"
@bbalegere

Thanks.
however mypp.appspot.com/about gives an error.
i have to include the trailing slash
mypp.appspot.com/about/

Is there any way to fix this?

@altitudebreath

Hi bbalegere,

you need to place ? mark after last slash, it makes it optional:

# index files
- url: /(.*)/?
  static_files: static/\1/index.html
  upload: static/(.*)/index.html
  expiration: "15m"
@darktable
Owner

@altitudebreath - Nice one character fix. Thanks.

@bbalegere

There is another problem.
mypp.appspot.com/about this works fine.
but mypp.appspot.com/about/ this does not.Any way to make both kinds of urls to work properly?
The url should open properly with or without trailing slash.

@darktable
Owner

okay, should work both ways now.

@bbalegere

Its working both ways now.But there is a problem when you click on a link in a page opened without the trailing slash.

If you open mypp.appspot.com/about and that page has link to a sub page,then it does not open.
The html code in the about page is like this

<a href="subpage/">subpage</a>

When a user clicks on it, mypp.appspot.com/subpage/ is opened instead of mypp.appspot.com/about/subpage/ .

However when the about page is accessed with the trailing slash , mypp.appspot.com/about/ , then mypp.appspot.com/about/subpage/ opens correctly when the link is clicked.

@mica

Thanks for this. You just saved me a lot of trouble.

You might want to add:

- url: /(.*\.pdf)
  mime_type: application/pdf
  static_files: static/\1
  upload: static/(.*\.pdf)
@ahmedmurtaza

tnx buddy
but would you tell me how to ulpoad php files????

@mica

GAE doesn't host PHP.

@ahmedmurtaza

is there any way to convert php in js?

@balajeerc

The yaml works perfectly. However, I would like to create a url handler for my scripts. For eg. is it possible to map /app to my script main.py?

@darktable
Owner

If you put your "/app" handler before the wildcard handlers "/(.+)/" (around line 170), it should work.

@ravivarma414

For some reason images don't seem to load anymore, although they did with:

application: myApp
version: 1
runtime: python
api_version: 1

handlers:
# Accessing URL '/' on the site should show the public/index.html file
- url: /
  static_files: public/index.html
  upload: public/index.html

# Accessing anything under '/' (i.e. any URL at all) should return that page from folder public 
- url: /
  static_dir: public```
@delro92

Is there a way to display 404 pages?

@lipis

For ttf I think it's better to use the application/x-font-ttf instead of font/truetype

https://github.com/h5bp/html5-boilerplate/blob/master/.htaccess#L148

@andlord

Thanks a lot !!!!!!! very helpful !!!!!

@GokulPraveenB

Very helpful ! .. but , images didnt work without mime types

instead of

  • url: /(..(bmp|gif|ico|jpeg|jpg|png))
    static_files: static/\1
    upload: static/(.
    .(bmp|gif|ico|jpeg|jpg|png))

i replaced with this .. It worked only after i added separate mime types like

  • url: /(..png)
    mime_type: image/png
    static_files: static/\1
    upload: static/(.
    .png)

can you let me know it didnt work regularly for me alone .. am using python 2.7

@TheGopherTactic

Why are certain file types handled on their own (.txt) with mime types and others are handled together ((bmp|gif|ico|jpeg|jpg|png))

@louischan

Mime type for svg should be image/svg+xml instead of images/svg+xml

@aweiand

What I do for sending email with GAE?
Thanks.

@thekondrashov

Here are the official MIME types for Web Fonts:

.eot -> application/vnd.ms-fontobject (as from December 2005) (gzip disabled)
.otf -> application/font-sfnt (as from March 2013) (gzip disabled)
.svg -> image/svg+xml (as from August 2011) (gzip enabled)
.ttf -> application/font-sfnt (as from March 2013) (gzip disabled, but GAE support ttf-fonts gzip with mime type "font/ttf")
.woff -> application/font-woff (as from January 2013) (already gzip compressed)

http://stackoverflow.com/questions/2871655/proper-mime-type-for-fonts#20723357

MIME types from MaxCDN (for example FontAwesome):
.eot -> application/vnd.ms-fontobject
.otf -> application/octet-stream
.svg -> image/svg+xml
.ttf -> font/ttf
.woff -> application/font-woff

/ sorry for my English /

@kumarjatin

The order of url specifications is crucial! Make sure any other url handler rule doesn't interfere with your static handler rule and comes before that.

Like this works

- url: /static
  static_dir : static
- url: .*
  script: main.py
  secure: always

but this doesn't

- url: .*
  script: main.py
  secure: always
- url: /static
  static_dir : static
@jasonwbarnett

Thank you very much... I can't tell you how awful their (Google App Engine) documentation is and this cleared things up.

@MaxLaumeister

In the config, the svg directive has an incorrect mime_type. Here is the current version:

- url: /(.*\.(svg|svgz))
  mime_type: images/svg+xml
  static_files: static/\1
  upload: static/(.*\.(svg|svgz))

Here is what it needs to be:

- url: /(.*\.(svg|svgz))
  mime_type: image/svg+xml
  static_files: static/\1
  upload: static/(.*\.(svg|svgz))

Was running into an issue where SVGs weren't loading in my pages! Otherwise, thank you for this gist, it's been very helpful for hosting static files on app engine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.