I created an App Engine application. Till now, I only have a few HTML files to serve. What can I do to make App Engine serve the index.html file whenever someone visits http://example.appengine.com/ ?
Currently, my app.yaml file looks like this:
application: appname
version: 1
runtime: python
api_version: 1
handlers:
- url: /
static_dir: static_files
This should do what you need:
https://gist.github.com/873098
Explanation: In App Engine Python it's possible to use regular expressions as URL handlers in app.yaml
and redirect all URLs to a hierarchy of static files.
Example app.yaml
:
application: your-app-name-here
version: 1
runtime: python
api_version: 1
handlers:
- url: /(.*\.css)
mime_type: text/css
static_files: static/\1
upload: static/(.*\.css)
- url: /(.*\.html)
mime_type: text/html
static_files: static/\1
upload: static/(.*\.html)
- url: /(.*\.js)
mime_type: text/javascript
static_files: static/\1
upload: static/(.*\.js)
- url: /(.*\.txt)
mime_type: text/plain
static_files: static/\1
upload: static/(.*\.txt)
- url: /(.*\.xml)
mime_type: application/xml
static_files: static/\1
upload: static/(.*\.xml)
# image files
- url: /(.*\.(bmp|gif|ico|jpeg|jpg|png))
static_files: static/\1
upload: static/(.*\.(bmp|gif|ico|jpeg|jpg|png))
# index files
- url: /(.+)/
static_files: static/\1/index.html
upload: static/(.+)/index.html
# redirect to 'url + /index.html' url.
- url: /(.+)
static_files: static/redirector.html
upload: static/redirector.html
# site root
- url: /
static_files: static/index.html
upload: static/index.html
In order to handle requests to URLs that don't end with a recognized type (.html
, .png
, etc.) or /
you need to redirect those requests to URL + /
so the index.html
for that directory is served. I don't know of a way to do this inside the app.yaml
, so I added a javascript redirector. This could also be done with a tiny python handler.
redirector.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<script language="JavaScript">
self.location=self.location + "/";
</script>
</head>
<body>
</body>
</html>
It could be done using (app.yaml):
handlers:
- url: /appurl
script: myapp.app
- url: /(.+)
static_files: staticdir/\1
upload: staticdir/(.*)
- url: /
static_files: staticdir/index.html
upload: staticdir/index.html
If you're trying to map /
to index.html
:
handlers:
- url: /
upload: folderpath/index.html
static_files: folderpath/index.html
the url:
will match on a path and supports regex.
- url: /images
static_dir: static_files/images
So if your image file is stored at static_files/images/picture.jpg
use this:
<img src="/images/picture.jpg" />
In WEB-INF/web.xml put:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
Here is app.yaml for how I got a site generated by Jekyll to work:
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /
static_files: _site/index.html
upload: _site/index.html
- url: /assets
static_dir: _site/assets
# index files
- url: /(.+)/
static_files: _site/\1/index.html
upload: _site/(.+)/index.html
- url: /(.*)
static_files: _site/\1
upload: _site/(.*)
- url: /.*
static_dir: _site