Google Cloud App Engine中的Angular 7路由不起作用

Ner*_*rix 6 google-app-engine google-cloud-platform google-cloud-sdk angular

我已经向Google Cloud App Engine发布了angular 7应用程序。

索引页面正在加载,但是子目录给了我

Error: Not Found
The requested URL /admin was not found on this server.
Run Code Online (Sandbox Code Playgroud)

这是我的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
Run Code Online (Sandbox Code Playgroud)

编辑:我终于弄清楚了app.yaml中的路由如何为Angular应用程序工作。这是我的工作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/.*
Run Code Online (Sandbox Code Playgroud)

V.T*_*ran 3

我认为如果您的资源文件只有 js 和 css,则处理程序中的路由规则可以正常工作。如果您有图像文件、音频文件等,则必须使用更通用的路由规则和正则表达式:

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
Run Code Online (Sandbox Code Playgroud)

想法是相同的,但从语法上讲,任何具有 filename.* 格式的文件的通配符匹配将处理所有资源文件。