Импорт правил Apache mod_rewrite

Руслан Якушев

Введение

Модуль перезаписи URL-адресов в IIS 7 и выше предоставляет функцию импорта, которая значительно упрощает процесс преобразования правил Apache mod_rewrite в правила перезаписи URL-адресов IIS. В этом пошаговом руководстве вы используете функцию правил импорта, указанную в модуле перезаписи URL-адресов, для импорта нескольких правил mod_rewrite в файл конфигурации IIS. Если вы еще не скачали модуль перезаписи URL-адресов, это можно сделать.https://www.iis.net/downloads/microsoft/url-rewrite

Настройка пошагового сценария

Чтобы узнать, как преобразовать правила mod_rewrite и убедиться, что преобразованные правила работают правильно, вы реализуете распространенный сценарий применения канонических имен узлов для веб-сайта. В этом примере вы будете принудительно использовать www.mysite.com вместо mysite.comэтого, чтобы при выполнении запроса, использующего имя узла, отличное www.mysite.comот имени, можно перенаправить запрос на каноническое имя узла.

  1. Запустите диспетчер IIS и нажмите кнопку "Веб-сайт по умолчанию".

  2. В области действий щелкните привязки и добавьте новую привязку HTTP для порта 8088.

    Снимок экрана: диалоговое окно Рис. 1. Добавление новой привязки

  3. С помощью Блокнот откройте %SystemDrive%\windows\system32\drivers\etc\hosts и добавьте две следующие строки в конце файла:

    127.0.0.1 www_mysite_com
    127.0.0.1 mysite_com
    

    Обратите внимание, что вы используете "_" вместо "." для разделителей домена. Это позволяет предотвратить попытку веб-браузера разрешить доменное имя с помощью dns-сервера.

  4. Сохраните файл hosts.

  5. Убедитесь, что имена узлов настроены правильно, открыв веб-браузер и перейдя на сайты http://www_mysite_com/iisstart.htm и в http://mysite_com/iisstart.htm.

Преобразование правил mod_rewrite

Правила Apache mod_rewrite для применения канонических имен узлов:

#For sites running on a port other than 80:
RewriteCond %{HTTP_HOST}   !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://www_mysite_com:%{SERVER_PORT}/$1 [L,R]

#And for a site running on port 80
RewriteCond %{HTTP_HOST}   !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www_mysite_com/$1 [L,R]

Чтобы преобразовать эти правила в формат перезаписи URL-адреса IIS:

  1. Запустите диспетчер IIS.

  2. Слева в области Подключение ions выберите веб-сайт по умолчанию.

  3. Справа в представлении функций щелкните " Перезаписать URL-адрес".

    Снимок экрана: панель

    Рис. 2. Перезапись URL-адресов

  4. В правой части области "Действия " нажмите кнопку "Импорт правил".

  5. Скопируйте приведенный выше пример mod_rewrite правил и вставьте их в текстовое поле "Переписать правила ".

    Снимок экрана: область

    Рис. 3. Правила для импорта

  6. Вкладка "Представлениедерева" в поле "Преобразованные правила " мгновенно отображает результат преобразования. Вы также можете щелкнуть вкладку "Представление XML", чтобы узнать, как правила хранятся в файле web.config.

    Снимок экрана: переключение между представлением дерева и представлением X M L в разделе

    Рис. 4. Преобразованные правила

    Если вернуться к представлению дерева и выбрать узел там, будет выделена соответствующая директива правила mod_rewrite в текстовом поле "Переопределение правил ".

    Снимок экрана: выбранный узел в представлении дерева преобразованных правил.

    Рис. 5. Представление дерева

    Обратите внимание, что во время преобразования правил были назначены имена по умолчанию. Чтобы изменить имена по умолчанию на что-то более понятное, выберите правило в представлении дерева, щелкните его правой кнопкой мыши и выберите "Переименовать " в контекстном меню.

    Снимок экрана: щелкните правой кнопкой мыши правило

    Рис. 6. Переименование

    Измените имя первого правила с ImportedRule1 на перенаправление на www_mysite_com:non-80. Измените имя второго правила с ImportedRule2 на перенаправление на www_mysite_com:80.

    В области действий нажмите кнопку "Применить", чтобы сохранить преобразованные правила в файл конфигурации Web.config, а затем нажмите кнопку "Вернуться к правилам".

    Снимок экрана: область действий с выделенным элементом

    Рис. 7. Вернуться к правилам

Проверка преобразованных правил

Чтобы проверить правильность работы правил, импортированных из mod_rewrite форматирования, откройте веб-браузер и перейдите к одному из следующих URL-адресов:

  • http://localhost/iisstart.htm
  • http://mysite_com/iisstart.htm

В обоих случаях веб-браузер перенаправляется в http://www_mysite_com/iisstart.htm.

Кроме того, если вы попытаетесь использовать любой из этих URL-адресов:

  • http://localhost:8088/iisstart.htm
  • http://mysite_com:8088/iisstart.htm

Веб-браузер перенаправляется в http://www_mysite_com:8088/iisstart.htm.

Обратите внимание, что правила, импортированные из mod_rewrite, включили применение канонических имен узлов для веб-сайта. Поиск Bing покажет другие примеры правил Apache mod_rewrite.

Заявление об отказе

ВАЖНО. Модуль перезаписи URL-адресов пытается преобразовать правила Apache mod_rewrite в функционально эквивалентные правила перезаписи URL-адресов IIS. Однако не все правила mod_rewrite могут быть преобразованы из-за отличий архитектуры между Apache и IIS. Настоятельно рекомендуется изучить набор правил mod_rewrite, пока вы не узнаете его функциональные возможности перед началом процесса преобразования. Затем после преобразования в правила перезаписи URL-адресов IIS просмотрите и проверьте результат преобразования, чтобы убедиться, что соответствующий набор правил переопределения IIS предоставляет ту же логику перезаписи URL-адресов.

Обратите внимание, что можно преобразовать только правила, которые соответствуют синтаксису Apache mod_rewrite. Любые другие форматы правил перезаписи (например, ISAPI_Rewrite, Ionic ISAPI Rewrite, IISRewrite и другие) не распознаются или преобразуются неправильно.