Serve static file using App Engine

南笙酒味 提交于 2019-12-28 10:06:56

问题


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

回答1:


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>



回答2:


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



回答3:


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" />



回答4:


In WEB-INF/web.xml put:

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>



回答5:


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


来源:https://stackoverflow.com/questions/5609000/serve-static-file-using-app-engine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!