Импорт правил 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
от имени, можно перенаправить запрос на каноническое имя узла.
Запустите диспетчер IIS и нажмите кнопку "Веб-сайт по умолчанию".
В области действий щелкните привязки и добавьте новую привязку HTTP для порта 8088.
Рис. 1. Добавление новой привязки
С помощью Блокнот откройте
%SystemDrive%\windows\system32\drivers\etc\hosts
и добавьте две следующие строки в конце файла:127.0.0.1 www_mysite_com 127.0.0.1 mysite_com
Обратите внимание, что вы используете "_" вместо "." для разделителей домена. Это позволяет предотвратить попытку веб-браузера разрешить доменное имя с помощью dns-сервера.
Сохраните файл hosts.
Убедитесь, что имена узлов настроены правильно, открыв веб-браузер и перейдя на сайты
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:
Запустите диспетчер IIS.
Слева в области Подключение ions выберите веб-сайт по умолчанию.
Справа в представлении функций щелкните " Перезаписать URL-адрес".
Рис. 2. Перезапись URL-адресов
В правой части области "Действия " нажмите кнопку "Импорт правил".
Скопируйте приведенный выше пример mod_rewrite правил и вставьте их в текстовое поле "Переписать правила ".
Рис. 3. Правила для импорта
Вкладка "Представлениедерева" в поле "Преобразованные правила " мгновенно отображает результат преобразования. Вы также можете щелкнуть вкладку "Представление XML", чтобы узнать, как правила хранятся в файле web.config.
Рис. 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 и другие) не распознаются или преобразуются неправильно.