Контекст
Последние несколько дней я боролся со следующей проблемой, и из-за самой природы CDN и ручного просмотра каждого нового правила мне каждый раз требуется до 4 часов для развертывания нового правила.
Как описано в следующем разделе, в настоящее время мое приложение Angular развернуто в учетной записи хранения, в которой есть один контейнер больших двоичных объектов с именем cdn
.
В корне этого контейнера больших двоичных объектов вся папка dist
из моего проекта angular была скопирована с помощью моей настройки CI.
Профиль CDN также настроен так, чтобы указывать на origin-path
с именем /cdn
.
Проблема
К сожалению, в настоящее время продолжается проблема, что вы не можете получить прямой доступ к файлу по умолчанию.
Я хотел бы перенаправить весь входящий трафик из моего приложения Angular в файл
index.html
. Это сделано для того, чтобы удовлетворить маршрутизацию для Angular.Кроме того, я хотел бы разрешить любой запрос статических файлов (например, изображений) без какой-либо конкретной перезаписи URL-адреса.
Я видел различные сообщения по этой проблеме, но ни один из ответов, похоже, не охватывал мой случай или не дал ожидаемого результата.
В настоящее время я использую функцию системы правил в Azure CDN от Verizon.
Что касается шаблонов, я использовал все шаблоны, упомянутые в следующие статьи, в том числе упомянутые в комментариях.
Я также потратил не менее двух дней, чтобы найти различные другие статьи и статьи о стеке, но ни одна из них не сработала для моего случая.
Кроме того, я также создал свой собственный шаблон регулярных выражений, но, хотя они работали в моей тестовой среде, они будут работать после развертывания в CDN.
Обычно я получал один из следующих результатов:
- Домен верхнего уровня
https://myFancyWebsite.azureedge.net
не будет переписывать URL-адрес вindex.html
, и я получу ошибку http404
- Домен верхнего уровня будет перенаправлять на
index.html
, но перестанет работать, как только я добавлю URL-адресhttps://myFancyWebsite.azureedge.net/login/callback
— снова ошибка http404
, как только я начну использовать/login/callback
- Домен верхнего уровня перепишет URL-адрес на что-то вроде
https://myFancyWebsite.azureedge.net/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn ....
в http-ошибке431
.
Официальная документация от Microsoft также не помогли в моем случае.
Я почти уверен, что я не первый, кто развертывает приложение Angular в учетной записи хранения, и кто-то столкнулся с теми же проблемами, что и я.
Я благодарен за любую информацию, которая указывает мне правильное направление, потому что в данный момент я определенно думаю о том, чтобы отказаться от полного развертывания учетной записи хранения.
Обновление 1
Со следующим шаблоном source
((?:[^\?]*/)?)($|\?.*)
, который также упоминался в статья здесь, я могу справиться, по крайней мере, с перезаписью домена верхнего уровня в файл index.html
.
К сожалению, мне все еще нужен дополнительный шаблон для перенаправления с https://myFancyWebsite.azureedge.net/login/callback
на https://myFancyWebsite.azureedge.net/index.html
Обновление 2
В настоящее время я обновляю шаблон регулярного выражения один или два раза в день, и он снова работает в моей тестовой среде, но перестает работать после его развертывания. Я начинаю думать, что Azure CDN добавляет что-то к URL-адресу после домена верхнего уровня, но я понятия не имею, как это проверить.
https://regex101.com/r/KK0jCN/23
Обновление 3
Мы пишем 3025 год, и я до сих пор не понимаю, почему, например, следующий шаблон не обрабатывает перезапись URL-адреса верхнего домена.