Правильная настройка обработчиков app.yaml для Google App Engine для статического HTML-сайта - PullRequest
0 голосов
/ 10 февраля 2019

Вот файловая структура моего веб-сайта:

public
│   404.html
│   app.yaml
│   index.html
│   index.xml
│   prereqs.zip
│   sitemap.xml
│   sof2018.py
|
├───categories
│       index.html
│       index.xml
├───css
│       styles.css
├───home
│       index.html
├───js
│       scripts.js
├───prerequisites
│       index.html
├───scripts
│   │   index.html
│   │   index.xml
│   │
│   ├───page
│   │   └───1
│   │           index.html
│   │
│   └───sof2018
│           index.html
├───tags
│       index.html
│       index.xml
└───usage
        index.html

В основном мне нужно убедиться в следующем:

  • , если какая-либо папка вызывается с косой чертой (скажем, /scripts/page/1/ или /home/), он должен искать index.html внутри этой папки
  • , если какая-либо папка вызывается без завершающего слеша (скажем, /scripts/page/1 или /home), он должен искать внутри index.htmlэта папка
  • , если вызывается какой-либо файл (скажем, /css/styles.css или /prereqs.zip), он должен возвращать файл

Чтобы отличить файлы от папок, достаточно простопроверить, есть ли точка (.), так как все мои файлы имеют расширения.Хотя я думаю, что кому-то еще может пригодиться решение, которое также обрабатывает файлы без расширения.

Я пробовал несколько различных регулярных выражений, все они, кажется, упускают тот или иной случай.Также попробовал все решения, предложенные в предыдущих вопросах по stackoverflow, практически на одной и той же вещи.

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

Я ищу общее решение, которое бы работало точно так же, как традиционный веб-хостинг , так как я предполагаю, что это пойдет на пользу другим, так какЧто ж.Тогда я буду свободен добавлять / изменять контент / структуру без необходимости каждый раз обновлять app.yaml.

PS Честно говоря, Google должен был сам предоставить решение, но они этого не сделали.Я предполагаю, что даже настоящие веб-разработчики не являются мастерами регулярных выражений.

PS2 Сайт создан с использованием статического генератора сайтов Hugo.Я могу подтвердить, что он работает на традиционном веб-хостинге (GoDaddy).Также я не знаю достаточно html / css / js, чтобы точно сказать, какова реальная внутренняя работа сайта;при необходимости я могу предоставить исходные файлы.

1 Ответ

0 голосов
/ 10 февраля 2019

Вы не можете достичь всего этого в (стандартной среде) GAE с полностью статичным веб-сайтом.Это потому, что у вас нет возможности заранее сообщить (например, при создании конфигурации app.yaml), если /some/path/item - это файл или папка и, следовательно, /some/path/item или /some/path/item/index.html должны быть соответственно возвращены.

Это не вопрос написания правильного регулярного выражения, это вопрос желания 2 различных результатов для того же регулярного выражения.

Для достижения чегоВы хотите, чтобы приложение проверяло состояние во время выполнения и принимало решение, а не статический сайт.

Если вы уроните свою вторую пулю, вы сможете достичь остальных с помощью этого:

- url: /(.*)/
  static_files: public/\1/index.html
  upload: public/.*/index.html

- url: /(.*)$
  static_files: public/\1
  upload: public/.*

Если у вас есть способ отличить файлы от папок, возможно, вы сможете придумать схему.Например, указав, что все имена файлов должны иметь расширения (а в каталогах не должно быть . в именах), вы можете сделать что-то вроде этого:

# /optional/path/folder/ - serve index.html inside
- url: /(.*)/
  static_files: public/\1/index.html
  upload: public/.*/index.html     

# /optional/path/name.extension => files - serve them
- url: /((.*\/)*[^\/]+\.[^\/]+)$
  static_files: public/\1
  upload: public/.*

# anything else is a folder - serve index.html inside
- url: /(.*)$
  static_files: public/\1/index.html
  upload: public/.*/index.html
...