Как сопоставить общие запросы к каталогам с соответствующим файлом index.html в Google AppEngine? - PullRequest
0 голосов
/ 31 октября 2018

У меня есть статический сайт в App Engine, использующий файл app.yaml по умолчанию. Основной обработчик URL выглядит так:

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

Я бы хотел направить все запросы форм:

http://mysite/somedirectory и http://mysite/somedirectory/

до http://mysite/somedirectory/index.html

Какой хороший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Ответ Дэна поставил меня на правильный путь. Это работало для всего, кроме корневого каталога. Вот что я использовал в итоге:

# Ending with a "." followed by non-slashes means a file, serve as-is:
- url: /((.*\.[^\/]+))$
  static_files: www/\1
  upload: www/.*

# Ending in a slash means a directory, serve corresponding index.html:
- url: /((.*))/$
  static_files: www/\1/index.html
  upload: www/.*/index.html

# Did not match above so must be a directory, serve corresponding index.html:
- url: /((.*))$
  static_files: www/\1/index.html
  upload: www/.*/index.html

Вы можете увидеть сайт в действии на https://www.tameware.com

0 голосов
/ 31 октября 2018

Для шаблона URL http://mysite/somedirectory/ у вас может быть такой обработчик:

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

Конечно, этот обработчик должен быть вставлен перед обработчиком всеобъемлющего, который у вас уже есть.

Но для шаблона http://mysite/somedirectory url все сложно, так как вы не можете сказать, представляет ли somedirectory файл и должен ли он быть предоставлен как есть или каталогом, в этом случае должен быть обработан соответствующий index.html ,

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

# a "." in name means a file, serve as-is:
- url: /(.*\/[^\/]*\.[^\/]*)$
  static_files: www/\1
  upload: www/.*

# no "." in name means a directory, serve corresponding index.html:
- url: /((.*))$
  static_files: www/\1/index.html
  upload: www/.*/index.html

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

...