Как заставить любой URL-адрес работать со СТАТИЧЕСКИМИ ФАЙЛАМИ с app.yaml в GAE?

У меня есть каталог сборки create-реагировать-приложение, я поместил его в облачное хранилище, а также добавил файл app.yaml:

runtime: python27
api_version: 1
threadsafe: true

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

Размещено на движке приложения и вуаля — оно работает!

Однако если example-domain.com/ работает, то example-domain.com/abc — нет. Я получаю сообщение Ошибка: не найдено. Запрошенный URL-адрес /abc не найден на этом сервере.

Я попытался заменить «/» на «/.*» в URL-адресе обработчика, но результат возвращает пустую страницу :(.

Какие-либо предложения? :)


person Nikola Tesla    schedule 29.04.2018    source источник
comment
Итак, это приложение GAE или статический сайт GCS? Не то же самое... Как вы это развертываете?   -  person Dan Cornilescu    schedule 30.04.2018
comment
Я выгружаю папку сборки и app.yaml в GCS, затем использую SSH консоли, чтобы скопировать файлы и развернуть их в механизме приложения. например: medium.com/google-cloud/   -  person Nikola Tesla    schedule 01.05.2018
comment
Хорошо, это приложение GAE, но оно использует GCS только в качестве хранилища, из которого развертывания GAE выполняются с использованием оболочки GCP.   -  person Dan Cornilescu    schedule 01.05.2018


Ответы (2)


Решение найдено. Оказывается, когда я использую static_dir, включается каждый URL-адрес, начинающийся с url этого обработчика. Учитывая, что каждый статический файл находится в каталоге build/static, я просто использовал url: /static для всего, что нужно обрабатывать из этой папки.

Create-react-app создает несколько файлов .json, которые находятся в каталоге сборки, поэтому я просто указал на них по отдельности, поскольку их всего несколько.

После того, как все это сделано, я могу использовать url: /.*, чтобы указать, что любой другой URL-адрес должен просто указывать на страницу index.html.

Это работает: (первый обработчик, вероятно, избыточен)

  runtime: python27
   api_version: 1
   threadsafe: true

   handlers:
   - url: /
     static_files: build/index.html
     upload: build/index.html
     secure: always
   - url: /static
     static_dir: build/static
   - url: /manifest.json
     static_files: build/manifest.json
     upload: build/manifest.json
   - url: /asset-manifest.json
     static_files: build/asset-manifest.json
     upload: build/asset-manifest.json
   - url: /service-worker.json
     static_files: build/service-worker.json
     upload: build/service-worker.json
   - url: /pageIcon.png
     static_files: build/pageIcon.png
     upload: build/pageIcon.png
   - url: /.*
     static_files: build/index.html
     upload: build/index.html
     secure: always
person Nikola Tesla    schedule 30.04.2018

Во-первых, у вас есть повторяющиеся обработчики для /. Вы никогда не доберетесь до второго обработчика.

Вы можете обслуживать статические файлы любого типа, используя регулярное выражение в своем обработчике, например:

- url: /(.*\.(ico|jpg|jpeg|png|gif|woff|ttf|otf|eot|svg|html))$
  static_files: build/\1
  upload: build/.*\.(ico|jpg|jpeg|png|gif|woff|ttf|otf|eot|svg|html)$
  secure: always
person GAEfan    schedule 30.04.2018
comment
как я могу получить доступ к файлам .php? - person Talk2Nit; 06.05.2021