djvirus

Запуск CakePHP на IIS

Часто, видел в инете библиотеки за $100 эмулирующие .htaccess, неужели их кто-то покупает? Долгое время я считал что mod_rewrite и IIS - вещи несовместимые. Но тут, пару дней назад, поставили задачу запустить проект на Windows хостинге (про LINUX вообще ничего слышать не хотели). Перепробовав несколько платных и бесплатных библиотек, поковырявшись денёк в настройках IIS и особенностях ASP.NET, мне таки удалось запустить на нём CakePHP с полноценными SEF URL-и!

Такое счастье стало возможным совершенно бесплатно благодаря маленькой библиотеке RewriteModule от Гайдара Магданурова, за которую ему большое программерское спасибо!

Требования: IIS 6+, ваш хостер должен позволять вам настраивать групповые ISAPI-расширения Wildcard application maps (Website Properties -> Home Directory -> Configuration -> Mappings) через Control Panel хостинга, либо через службу поддержки, Windows 2000 не подходит т.к. IIS 5 не поддерживает данную функцию. Версию .NET Framework я использовал 2.0, разработчик библиотеки говорит, что можно и на 1.1, но я не пробовал.

Собственно, инструкция:

  • Скачиваем, компилируем и устанавливаем .dll в папку bin
  • Прописываем необходимые строки в web.config
  • Правила прописываем следующие:
    <rule source="(.+/)?$" destination="app/webroot/index.php?url=/$1" />
    <rule source="(.*)" destination="app/webroot/$1" />
  • А теперь самое важное, в настройках IIS добавляем запись Wildcard application maps -> Insert c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
    или где он там у вас лежит, убрать галочку проверки существования файла Verify that file exists

В моей CMS правила выглядят немного сложнее:
<!-- Это правило для того чтобы следующее за ним не применялось к стандартным папкам -->
<!-- .html файлы из этих папок не должны обрабатываться index-ом -->
<rule source="((?:css|files|img|js)/.+|favicon.ico)" destination="app/webroot/$1" />
<!-- Моя CMS эмулирует структуру обычного статического сайта, поэтому добавляю .html -->
<rule source="(.+(?:/|\.html))?$" destination="app/webroot/index.php?url=/$1" />
<!-- А тут закрываем доступ к кореню, как в CakePHP -->
<rule source="(.*)" destination="app/webroot/$1" />

2 Responses to “Запуск CakePHP на IIS”

  1. kha0son 04 Nov 2007 at 4:35 pm

    Под IIS (если, например, сайт под PHP и использовать описанный выше метод неудобно и накладно), то лучше делать реврайты ISAPI модулем. Я, например, использую Ionics Isapi Rewrite Filter (IIRF, скачать можно здесь: http://www.codeplex.com/IIRF ). Главное - что он полностью совместим с синтаксисом mod_rewrite под Apache. Таким образом мигрировать на IIS очень становится не легко, а очень легко.

    Только одно замечание. Необходимо вручную добавить ко всем выражениям в RewriteRule полный путь от корня сайта, т.к. в .htaccess этого не делается (путь берется относительно месторасположения самого .htaccess). Если правила итак в корне, то необходимо добавить в начало каждого выражения прямой слеш - “/”.

    Таким макаром я очень успешно мигрировал свой DLE с апача на IIS (просто скопировал содержимое их файла .htaccess в конфиг модуля и добавил к ним слеши). Все работает прекрасно.

  2. djviruson 05 Nov 2007 at 10:33 am

    За ссылку респект! ))
    Только будте внимательны при выборе хостинга, чтобы он разрешил вам использовать свои фильтры, идеальный вариант - выделенный сарвер.

Comments RSS

Leave a Reply