Перезапись URL-адресов Azure CDN Premium Verizon Rules Engine V4 для подкаталогов статического веб-сайта хранилища

Я пытаюсь провести Angular проект с Azure Storage Static Website через Azure CDN Verizon Premium

Допустим, у меня есть контейнеры для каждого Angular сборки, названные как v0.3.13.3 и в этом контейнере также есть многоязычные сборки проекта angular.

Я пытаюсь достичь правильного index.html с правильной маршрутизацией для каждой версии и языка.

Вы можете найти примеры маршрутов ниже:

my.domain.com/v0.3.13.3 должен служить /v0.3.13.3/index.html
my.domain.com/v0.3.13.3/dashboard должен служить /v0.3.13.3/index.html
my.domain.com/v0.3.13.3/fr должен служить /v0.3.13.3/fr/index.html
my.domain.com/v0.3.13.3/fr/dashboard должен служить /v0.3.13.3/fr/index.html

Мне удалось сделать это с Azure Standard Rules Engine как на скриншоте ниже.

Но, насколько я понял из документации, в стандартном движке правил Containsполе не может быть заполнено регулярным выражением. Я покопался по всему Google, но не нашел подходящего мне решения.

Итак, я переключил свою службу CDN на Verizon Premium и попытался подать заявку (v(?:(\d+)\.)?(?:(\d+)\.)?(?:(\d+)\.\d+)) для пути к регулярному выражению.

Основная проблема, с которой я столкнулся с Verizon Premium, заключается в том, что я могу подавать только URL Rewrite функция, если я указываю свое поле IF как Always

Как вы видете URL Rewrite нет в списке.

Также я сделал несколько развертываний, используя Always заявление, но они не сделали ничего хорошего.

Единственный пример, которым все делятся в своих блогах

Таким образом, приведенный выше пример не охватывает расширения файлов и суб-маршруты.

Есть ли способы достичь моей цели?

Заранее спасибо.

3 ответа

Я хотел бы поделиться своей текущей конфигурацией, которую я использую в Verizon Premium в правиле V4: шаги:

  1. Новое правило: Общее Всегда
  2. Функция: URL-адрес -> перезапись URL-адреса
  3. Источник: /80XXXXXX/XXXXXX/((?:[^\?]*/)?)($|\?.*)
  4. Назначения:
  5. И добавьте второе правило. Источник: /80XXXXXX/XXXXXX/((?:[^\?]*\/)?[^\?\/.]+)($|\?.*)
  6. Назначения: /80XXXXXX/XXXXXX/index.html$2

Также вы можете получить происхождение, как описано здесь /questions/53019080/polzovatelskoe-pravilo-perezapisi-azure-cdn-verizon-nedopustimoe-proishozhdenie/53019085#53019085

Это правило XML было сгенерировано

      <policy>    
  <rules>   
    <rule>
        <match.always>
            <feature.url.url-rewrite source="/80XXXXXX/XXXXXX/((?:[^\?]*/)?)($|\?.*)" destination="/80XXXXXX/XXXXXX/index.html$2"/>
            <feature.url.url-rewrite source="/80XXXXXX/XXXXXX/((?:[^\?]*\/)?[^\?\/.]+)($|\?.*)" destination="/80XXXXXX/XXXXXX/index.html$2"/>
        </match.always>
    </rule>
  </rules>
</policy>

Я надеюсь, что это поможет кому-то

См. Ниже в Rules Engine 4.0, как выбрать перезапись URL-адреса в Azure CDN - документация в настоящее время отсутствует и все еще пытаются заставить это работать. Я обновлю этот пост, как только он будет правильно настроен

В марте 2022 года я немного потрудился над этой проблемой, используя V4 механизма правил. Наконец-то я заставил перенаправление работать, продублировав перенаправления для учета обоих хэшей для исходного сервера, начиная с 00 и 08 в моем случае. Такое ощущение, что CDN использует сине-зеленую методологию развертывания, и каждый раз, когда вы развертываете, он переключается на другой сервер.

Поэтому, если вы развертываете с использованием хэша, начинающегося с 00, ваше развертывание переместится на сервер 08.

Затем вы пытаетесь выполнить развертывание с использованием хэша 08, а система жалуется, что вы ничего не изменили. :)

Так что я просто продублировал код и плакал в подушку по ночам.

Для справки, если вы попытаетесь развернуть в разделе «feature.url.url-redirect source» с помощью регулярного выражения, содержащего что-то вроде /[0-9]+, когда вы измените черновик на политику , система будет жаловаться, что источник не соответствует ни одному известному происхождению.

Это то, что сработало для меня. Если у кого-то есть более элегантное решение, я приветствую его!

      <policy>
<rules>
    <rule>
        <description>Redirect HTTP to HTTPS 00 Version</description>
        <match.request.request-scheme.literal value="http">
            <feature.url.url-redirect source="/00XXXXXX/www-example-com/(.*)" destination="https://%{host}/$1" code="302"/>
        </match.request.request-scheme.literal>
    </rule>
    <rule>
        <description>Redirect HTTP to HTTPS 80 Version</description>
        <match.request.request-scheme.literal value="http">
            <feature.url.url-redirect source="/80XXXXXX/www-example-com/(.*)" destination="https://%{host}/$1" code="302"/>
        </match.request.request-scheme.literal>
    </rule>
    <rule>
        <description>Site redirects to 00 Version</description>
        <match.request.request-scheme.literal value="https">
            <select.first-match>
                <match.url.url-path.regex result="match" value="[\/#]*\/dir1\/subdir1.*" ignore-case="true" encoded="false">
                    <feature.url.url-redirect source="/00XXXXXX/www-example-com/.*" destination="https://www.example.com/#/dir1/subdir1" code="302"/>
                </match.url.url-path.regex>
                <match.url.url-path.regex result="match" value="[\/#]*\/folder2\/subfolder2.*" ignore-case="true" encoded="false">
                    <feature.url.url-redirect source="/00XXXXXX/www-example-com/.*" destination="https://www.example.com/#/folder2/subfolder2" code="302"/>
                </match.url.url-path.regex>
                <match.url.url-path.regex result="match" value=".*" ignore-case="true" encoded="false">
                    <feature.url.url-redirect source="/00XXXXXX/www-example-com/.*" destination="https://www.example.com/" code="302"/>
                </match.url.url-path.regex>
            </select.first-match>
        </match.request.request-scheme.literal>
    </rule>
    <rule>
        <description>Site redirects to 80 Version</description>
        <match.request.request-scheme.literal value="https">
            <select.first-match>
                <match.url.url-path.regex result="match" value="[\/#]*\/dir1\/subdir1.*" ignore-case="true" encoded="false">
                    <feature.url.url-redirect source="/80XXXXXX/www-example-com/.*" destination="https://www.example.com/#/dir1/subdir1" code="302"/>
                </match.url.url-path.regex>
                <match.url.url-path.regex result="match" value="[\/#]*\/folder2\/subfolder2.*" ignore-case="true" encoded="false">
                    <feature.url.url-redirect source="/80XXXXXX/www-example-com/.*" destination="https://www.example.com/#/folder2/subfolder2" code="302"/>
                </match.url.url-path.regex>
                <match.url.url-path.regex result="match" value=".*" ignore-case="true" encoded="false">
                    <feature.url.url-redirect source="/80XXXXXX/www-example-com/.*" destination="https://www.example.com/" code="302"/>
                </match.url.url-path.regex>
            </select.first-match>
        </match.request.request-scheme.literal>
    </rule>
</rules>
Другие вопросы по тегам