12

I've published an angular 7 Application to Google Cloud App Engine.

The index page is loading, but the subdirectorys give me

Error: Not Found
The requested URL /admin was not found on this server.

This is my app.yaml:

runtime: nodejs10


env_variables:
environment: "--prod"

handlers:

  - url: /
    static_files: dist/XXX/index.html
    upload: dist/XXX/index.html
  - url: /
    static_dir: dist/XXX/
  - url: /.*
    secure: always
    script: auto

Edit: I finally figured out, how the routing in app.yaml works for Angular Applications. Here is my working app.yaml:

runtime: nodejs10

env_variables:
  environment: "--prod"

handlers:

- url: /
  secure: always
  static_files: dist/index.html
  upload: dist/.*
- url: /(.*\.js)
  secure: always
  redirect_http_response_code: 301
  static_files: dist/\1
  upload: dist/.*\.js
- url: /(.*\.css)
  secure: always
  redirect_http_response_code: 301
  static_files: dist/\1
  mime_type: text/css
  upload: dist/.*\.css
- url: /.*
  secure: always
  static_files: dist/index.html
  upload: dist/.*
2
  • Only this worked for me. Commented Sep 18, 2019 at 1:23
  • Could've posted the solution as an answer, but it seems to work fine. Commented Sep 20, 2019 at 15:52

1 Answer 1

4

I think your routing rules in handlers work fine if your resource files are only js and css. If you have image files, audio files, etc, you must use a more generic routing rule with regex:

handlers:
  - url: /
    secure: always
    static_files: www/index.html
    upload: www/index.html

  #  Routing rules for resources, css, js, images etc. Any file with format filename.ext
  - url: /(.*\.(.+))$
    secure: always
    static_files: www/\1
    upload: www/(.*\.(.+))$

  #  Routing rule for Angular Routing
  - url: /(.*)
    secure: always
    static_files: www/index.html
    upload: www/index.html

The idea is the same, but syntactically, a wild card match for any files with format filename.* will handle all the resource files.

Sign up to request clarification or add additional context in comments.

1 Comment

this is a better approach than the self-answer in the question OP.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.