Конвертирование .htaccess (Apache) в web.config (IIS)

Получилось так, что при переносе сайта на сервер, сервером оказался IIS8 со всеми вытекающими: mod_rewrite работать перестал, равно как и весь .htaccess, который в принципе не разбирается IIS’ом. Настало время научить это чудище понимать, что я от него хочу.

Мне повезло несколько больше, ибо у меня стоит и Apache, и IIS — надо бывает. Сначала расскажу, как это происходит, когда мелкомягкой поделки в наличии нет.

Для начала нагуглилось это: http://cbsa.com.br/tools/online-convert-htaccess-to-web-config.aspx Оно прекрасно конвертирует в удобоваримый вид для WordPress и Magento, но мне не подошло, ибо MODX со своими правками в .htaccess

Теперь, когда часть любопытствующих ушла, чтобы потом вернуться и дочитать, можно развивать тему. Для понимания, как оно вообще все конвертируется есть вот такой хендбук: http://www.iis.net/learn/application-frameworks/install-and-configure-php-applications-on-iis/translate-htaccess-content-to-iis-webconfig от MS. Круть, но все на заморских диалектах (хотя, общий вектор должен быть понятен).

Кстати, заметил, что RewriteBase у IIS нет, если что. Не знает он про такое дело.

Когда не помогли первые две ссылки, есть еще вариант конвертирования с использованием специально обученной приблуды от Microsoft. Имя ей «Переопределение URL-адресов» или «URL Rewrite«, в комплекте с IIS ее почему-то не нашлось.

Вообще, все это описано тут: http://www.iis.net/learn/extensions/url-rewrite-module/importing-apache-modrewrite-rules но я опишу кириллицей.

Для начала, имея уже установленный IIS (у меня в песочнице 7.5, на том сервере стоит 8), качаем это: http://www.iis.net/download/urlrewrite и, ничтоже сумняшеся, устанавливаем.

Первые два пункта гласят, что надо добавить еще один порт. У меня стоит 8080 (чтобы не мешать индейцу), так что я особо не переживал, но всем скажу, что, на самом деле, это, скорее, написано, чтобы перебдеть, а оно, как известно, лучше, чем недобдеть.

Пункт три говорит о том, что для того, чтобы сайт заработал, надо указать его в hosts, но это мы с вами и так знаем, поэтому смело двигаемся дальше. Для тех, кто пока не знает — сообщаю, что там находится что-то типа DNS, который указывает, где искать сайт с определенным IP, это нужно, когда сайт на локалхосте, например.

В пункте 5 показан пример файла .htaccess

Теперь самое интересное. Когда установили urlrewrite, надо перезагрузить компьютер. Я пытался перезапускать сервер — ничего у меня не вышло, получилось только после перезагрузки (эх-венда-венда).

После перезагрузки, переходим в оснастку управления IIS, там открываем «Default Web Site» слева и в самом большом окне появляется «Переопределение URL-адресов» или «URL Rewrite«, в завсимости от локализации. Казалось бы, все, но не тут-то было!

Тыкаем мышкой на этот новый пункт и справа открывается список того, что мы можем сделать с ним и вообще с этим сайтом. Нам нужен самый верхний пункт «Открытие функции» или тот же пункт в контекстном меню при нажатии на иконку «Переопределение URL-адресов«. Ну, или даблклике, кому как удобнее.

Список действий справа изменился, теперь там надо ткнуть на «Импортировать правила» — это откроет окно, где в самом верху будет строка для выбора пути к файлу .htaccess — открываем файл, ниже появляется ответ с ошибками или успешными результатами конвертирования. Красным помечены ошибки — то, что IIS не поймет или те директивы, которые не поддерживаются IIS’ом, например, RewriteBase.

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

0

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