Как разрешить обновление браузера при размещении приложения Angular 4 с BLOB-объектами Azure и прокси-функциями функций Azure

Я использовал angular-cli для создания своего приложения Angular.

Примечание. Я использую стратегию маршрутизации PathLocationStrategy, и из-за других ограничений я не могу использовать HashLocationStrategy.

Я загрузил все статические файлы в контейнер внешнего интерфейса в BLOB-объектах хранилища Azure. Приложение работает нормально, за исключением двух ограничений, с которыми я столкнулся:

  1. Пользователь должен ввести полный URL-адрес, а не только доменное имя (т.е. https://someblob.blob.core.windows.net/frontend/index.html)
  2. Когда пользователь нажимает обновление браузера, возвращается ошибка 404.

Используя функции прокси Azure и следующий файл proxies.json, мне удалось решить первое ограничение. Т.е. пользователь может получить доступ к приложению, просмотрев some-azure-function.azurewebsites.net. Но не второй.

Есть ли способ решить второе ограничение с помощью прокси-серверов функций Azure?

proxies.json:

{
  "$schema": "http://json.schemastore.org/proxies",
  "proxies": {
    "refresh": {
      "matchCondition": {
        "route": "/frontend/"
      },
      "backendUri": "https://someblob.blob.core.windows.net/frontend/index.html"
    },
    "allfiles": {
      "matchCondition": {
        "route": "/frontend/{*rest}"
      },
      "backendUri": "https://someblob.blob.core.windows.net/frontend/{rest}"
    },
    "root": {
      "matchCondition": {
        "route": "/"
      },
      "backendUri": "https://someblob.blob.core.windows.net/frontend/index.html"
    }
  }
}

1 ответ

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

Ваш средний прокси-сервер добавит весь текст URL в запрос к хранилищу BLOB-объектов, поэтому запрос https://myfunctionapp.azurewebsites.net/frontend/index.html/foo/bar' will send a request to blob storage as https://someblob.blob.core.windows.net/frontent/index.html/foo/bar`

Обновите ваш средний прокси до внутреннего Uri https://someblob.blob.core.windows.net/frontent/index.html и каждую страницу перенаправлять обратно на домашнюю страницу, или изменить условие соответствия, чтобы проанализировать дополнительную информацию.

"route": "https://someblob.blob.core.windows.net/frontend/frontend/{page}/{*rest}" захватит имя страницы в {page}

Другие вопросы по тегам