web.config много псевдонимов доменов, два сайта в одном IIS VHOST.Arghhhhhhh - PullRequest
0 голосов
/ 26 июня 2018

Я гуглил.Я попробовал тысячу вариантов, найденных на SO, но безрезультатно.

Вот моя проблема:

Один Vhost на IIS.Десять доменов указывают на это.Приложение настроено на использование двух имен хостов в одном домене, но все остальные псевдонимы должны перенаправляться на основной site1.domain.com.

site1.domain.com (основной сайт / host.domain) site2.domain.com (второе приложение, запущенное на том же виртуальном хосте)

Чего я не хочу делать, так это настроить группу виртуальных хостов.Я пытаюсь запустить все это в одном vhost и перенаправить все в web.config.

Это последняя версия web.config, которая находится в бесконечном цикле.Я понимаю, почему, но я не могу исправить второе правило для работы.

Моя идея:

  1. Сначала найдите «второе» имя хоста и разберитесь с ним,так как он буквальный, то перенаправьте его на домСамо по себе это работает просто отлично.

  2. Как только это будет сделано, найдите все, что не является site1.domain.com, и перенаправьте его на site1.domain.com.

Конечно, все нужно перенаправить на SSL.

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

<rewrite>
    <rules>
        <rule name="site2 HTTPS redirect" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="^(site2.)?domain.com" ignoreCase="true" />
                <add input="{HTTPS}" pattern="off" ignoreCase="true" />
            </conditions>
            <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{R:1}" />
        </rule>
        <rule name="site1 HTTPS redirect" stopProcessing="true">
            <match url="(.*)" ignoreCase="true" />
            <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="(https://site1)?.domain.com" />
            </conditions>
            <action type="Redirect" url="https://site1.domain.com{R:1}" redirectType="Permanent" />
        </rule>
    </rules>
   </rewrite>

1 Ответ

0 голосов
/ 28 июня 2018

Theres проблема с вашим web.config.pattern="(https://site1)?.domain.com" никогда не совпадет с {HTTP_HOST}, так как содержит только имя хоста, то есть: site1.domain.com (вы можете использовать 2 условия с logicalGrouping="MatchAll", как в предыдущем правиле).

Лично я бы порекомендовал использовать дополнительный выделенный хост для обработки перезаписей (см. Мой ответ: Перенаправление IIS не-WWW в WWW вместе с HTTP на HTTPS ISSUE ).Это проще, и пул приложений вашего основного сайта не должен делать никаких перенаправлений, он только обрабатывает запросы на привязки ssl для сайтов вашего хостинга, что просто кажется хорошей идеей.(Я ожидаю, что это немного быстрее, так как вашему приложению не придется оценивать перенаправления при каждом запросе - но это предположение)

...