Подтвердить что ты не робот

Удалите расширение .html с помощью приложения Google Appengine с Java

Я невероятно запутался здесь. Я использовал Google Appengine для нашего веб-сервера, и до сих пор он отлично работал, но у меня был запрос на загрузку веб-страниц без расширения .html. Я читал и вижу, что мне нужно создать файл app.yaml для сопоставления URL-адреса другому? Это то, что у меня есть в моем файле:

application: company-website
version: 1
runtime: java
threadsafe: true

handlers:
  - url: /about
  script: about.html

Я пытаюсь прочитать, как это сделать на своем сайте документации, но я не могу найти ничего, ссылаясь на то, как удалить расширение и все еще указывать на правый html файл. Может кто-нибудь мне помочь? Могу ли я просто сделать это в файле appengine-web.xml, также? Похоже, я мог просто сделать это там, не создав файл app.yaml.

Любая помощь будет оценена по достоинству. Спасибо!

edit: попробовал еще кое-что. Пробовал перемещать файл. Я пытаюсь удалить расширение в свою собственную папку, например:

/root
  -index.html
  -/about
     -index.html

И это было нормально, когда я набрал свой domain.com/about/, он работает, но когда я набрал domain.com/about, это не так. Очень расстраивает.

4b9b3361

Ответ 1

В идеальном мире у нас будет возможность настроить переписывание как apache mod_rewrite на базовом веб-сервере. К сожалению, невозможно настроить переписывание на таком уровне.

Я немного искал и обнаружил, что наиболее распространенным ответом для перезаписи является пользователь UrlRewriteFilter или самостоятельно подключите сервлеты. Оба варианта описаны в

Оба работают одинаково и требуют, чтобы приложение обслуживало статический контент через движок приложения. Это приведет к часам экземпляров ядра приложения и более медленным ответам, поскольку все ваши статические файлы переходят из сети доставки контента Google (cdn) в ваше приложение с узким местом. Возможно, вам также потребуется развернуть ваши статические файлы как ресурс (How-To настроить статические файлы и ресурсы), по крайней мере, это как я это сделал раньше.

Это параметры "чистой Java", которые у вас есть. app.yaml, который описывается Josep Valls, будет работать с Java на App Двигатель. Главный вопрос здесь заключается в том, что конфигурация app.yaml достаточно низка, чтобы быть переписанной, которую Google распознает в своем cdn, или вы будете продолжать запись через часы экземпляра, потому что все содержимое передается через экземпляры.

документация сообщает нам:

Для эффективности App Engine хранит и обслуживает статические файлы отдельно из файлов приложений. Статические файлы недоступны в файловой системы приложения. Если у вас есть файлы данных, которые необходимо прочитать по коду приложения файлы данных должны быть файлами приложений и не должны соответствовать статическому шаблону файла.

Так как это происходит прямо перед разделом, в котором объясняется, как настроить обработчики шаблонов статических файлов, следует предположить, что конфигурация таких обработчиков не нарушит описанную выше логику - это

хранит и обслуживает статические файлы отдельно от файлов приложений.

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

Это все существующие варианты, которые я мог найти и знать. Если кто-то знает больше на эту тему, прокомментируйте/ответьте.

EDIT (7.12.2015) Моя цель maven appengine:devserver полностью не обращает внимания на настройки в app.yaml. Мне нужно поэкспериментировать с этим на одной из следующих фаз развертывания или использовать mvn gcloud:run.

... позже в этот день:

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

Ответ 2

В Python и Go вы можете использовать регулярное выражение в ваших обработчиках URL-адресов; если Java также использует app.yaml, вы могли бы это сделать:

- url: /(about|other|sections)$
  static_files: \1\.html