Статический обработчик веб-сайта Google App Engine - PullRequest
0 голосов
/ 27 июня 2018

У меня есть веб-сайт React.js, использующий приложение create-реакции-приложение, и я только что перешел с хостинга Firebase в стандартную среду Google App Engine.

С помощью Firebase Hosting я мог бы создавать маршруты типа https://example.com/route или https://example.com/newRoute/123, и Firebase знал бы, что нужно обслуживать index.html для любого из этих маршрутов.

Я хочу использовать любой маршрут нашего приложения для использования index.html, исключая файлы .js и .css. Если я использую только подстановочный знак /(.*), то запрос нашего файла main.js также преобразуется в index.html.

Вот наш конфиг обработчика

handlers:
  - url: /
    secure: always
    application_readable: false
    static_files: build/index.html
    require_matching_file: false
    upload: build/index.html
  - url: /login
    secure: always
    application_readable: false
    static_files: build/index.html
    require_matching_file: false
    upload: build/index.html
  - url: '/(.*)'
    secure: always
    application_readable: false
    static_files: "build/\\1"
    require_matching_file: false
    upload: 'build/.*'

В текущей конфигурации каждый созданный мной маршрут должен быть зарегистрирован как обработчик. Я надеялся найти решение, в котором все текущие и будущие маршруты могут быть обработаны подстановочным знаком.

1 Ответ

0 голосов
/ 27 июня 2018

Порядок обработчиков имеет значение, выигрывает 1-й с соответствующим шаблоном.

Таким образом, чтобы достичь желаемого, вы можете сначала обработать исключения, прежде чем «подстановочные знаки» для index.html. Что-то вроде этого (я предположил, что файлы .css и .js также относятся к build dir):

handlers:

  - url: /(.*\.css)$
    secure: always
    static_files: build/\1
    upload: build/.*\.css$

  - url: /(.*\.js)$
    secure: always
    static_files: build/\1
    upload: build/.*\.js$

  # continue similarly the other static assets
  # or maybe try a more generic one covering several of them:
  - url: /(.*\.(js|css|png|jpg|svg))$
    secure: always
    static_files: build/\1
    upload: build/.*\.(js|css|png|jpg|svg)$

  # wildcard everything else, serving index.html
  - url: '/(.*)'
    secure: always
    static_files: build/index.html
    upload: build/index.html

Примечание: для удобства чтения я также отбросил require_matching_file (в GAE такого нет) и application_readable (по умолчанию это false).

...