Вот файловая структура моего сайта:
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.
P.S. Честно говоря, Google должен был предоставить решение, но они этого не сделали. Я предполагаю, что даже настоящие веб-разработчики не являются мастерами регулярных выражений.
P.S.2 Сайт сделан с помощью генератора статических сайтов Hugo. Я могу подтвердить, что он работает на традиционном веб-хостинге (GoDaddy). Также я недостаточно знаю html/css/js, чтобы точно сказать, какова фактическая внутренняя работа сайта; при необходимости могу предоставить исходники.
Вы не можете добиться всего этого в (стандартной среде) 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