IIS URL Rewrite – Перенаправление корня в подпапку

Вопрос или проблема

Я хочу, чтобы: http://somesite.com перенаправлялся на http://somesite.com/subfolder

Кажется, это довольно простая задача. Я следовал инструкциям в интернете, и все указывают на то, что я должен использовать ^$ для шаблона регулярного выражения. Я также добавил перенаправление с HTTP на HTTPS, и это работает нормально. Я также пробовал отключать это правило, чтобы убедиться, что оно не мешает. Это работает на IIS 10 / Server 2016.

Мой web.config выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Redirect root to NmConsole" stopProcessing="true">
                    <match url="^$" ignoreCase="true" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Redirect" url="/subfolder" appendQueryString="true" />
                </rule>
                <rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{HTTPS}" pattern="^OFF$" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Запросы к корневому домену не перенаправляются. Почему это не работает?

Может быть, HTTP Redirect здесь более подходящий вариант, хотя эта функция не включена по умолчанию.

Для Windows Server пройдите через мастер добавления функций и ролей и включите HTTP Redirection в разделе Server Roles > Web Server (IIS) > Common HTTP Features

Для компьютеров под управлением Windows перейдите в appwiz.cpl и выберите Включить или отключить компоненты Windows вместо этого.

Как только это будет включено, добавьте:

<system.webServer>
   <httpRedirect enabled="true" destination="http://somesite.com/subfolder" />
</system.webServer>

в ваш файл web.config, и вы должны быть в порядке. Подробнее об этом можно прочитать в документации Microsoft

Ответ или решение

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

Теория: Перенаправление URL в IIS

Windows Server Internet Information Services (IIS) предоставляет мощные инструменты для маршрутизации и перенаправления запросов, в том числе через модуль URL Rewrite. Выстраивание корректных правил через web.config позволяет перенаправлять трафик с одного пути на другой, добавлять условия и использовать сложные выражения. Правильное понимание регулярных выражений и конфигураций URL Rewrite может существенно упростить задачу.

Пример: Конфигурация в web.config

Ваш текущий web.config демонстрирует правильную идею использования URL Rewrite для перенаправления с корня сайта на подкаталог. Давайте рассмотрим каждый элемент конфигурации в отдельности:

Правило "Redirect root to NmConsole"

<rule name="Redirect root to NmConsole" stopProcessing="true">
    <match url="^$" ignoreCase="true" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
    <action type="Redirect" url="/subfolder" appendQueryString="true" />
</rule>
  • : Шаблон ^$ используется для сопоставления пустого URL, то есть, когда пользователь заходит напрямую на somesite.com без указания какого-либо пути. Этот шаблон является стандартным для перенаправления с корня.

  • : Эта роль отвечает за создание перенаправления, используя путь /subfolder. Опция appendQueryString="true" позволяет сохранять любые параметры запроса, которые могут быть прикреплены к URL.

Правило "Redirect to HTTPS"

<rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTPS}" pattern="^OFF$" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
</rule>

Это правило замещает небезопасные HTTP-запросы на HTTPS, что добавляет дополнительный уровень безопасности. Однако, убедитесь, что это правило не имеет конфликтов с редиректом в подкаталог.

Применение: Исправление и альтернатива

Если ваш текущий web.config не работает как ожидается, вот несколько шагов и предложений, как можно устранить проблему:

  1. Проверка конфигураций: Убедитесь в том, что URL Rewrite установлен и работает корректно в IIS на вашем сервере. Без правильно установленных компонентов ваши правила не будут исполняться.

  2. Порядок выполнения правил: Проверьте порядок выполнения правил в файле web.config. Правило HTTPS может срабатывать раньше перенаправления на подкаталог, поэтому попробуйте изменить их порядок.

  3. Разрешения серверных ролей: Возможно использование компонента HTTP Redirection вместо URL Rewrite. Если URL Rewrite не решает проблему или его возможности слишком сложны для ваших целей, HTTP Redirection подойдёт для более простых случаев перенаправлений.

    Убедитесь в том, что эта функция включена через Server RolesWeb Server (IIS)Common HTTP Features в серверной версии Windows, или через пункт Turn Windows Features On or Off в версии Windows для настольных систем.

  4. Пример конфигурации для HTTP Redirection:

    <system.webServer>
      <httpRedirect enabled="true" destination="http://somesite.com/subfolder" />
    </system.webServer>

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

  5. Логи и диагностика ошибок: Если ни одно решение не помогает, проверьте серверные логи IIS для выявления возможных ошибок или несоответствий, которые могут вызывать неправильное редиректирование.

Таким образом, использование или корректировка данных решений и конфигураций позволит вам настроить IIS для надежного и корректного перенаправления запросов с корневого сайта в указанный подкаталог. Ваши усилия по настройке URL Rewrite или HTTP Redirect должны быть подкреплены хорошими знаниями работы с регулярными выражениями и серверными конфигурациями.

Оцените материал
Добавить комментарий

Капча загружается...