Sep 24th, 2007
Запуск 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" />
Под IIS (если, например, сайт под PHP и использовать описанный выше метод неудобно и накладно), то лучше делать реврайты ISAPI модулем. Я, например, использую Ionics Isapi Rewrite Filter (IIRF, скачать можно здесь: http://www.codeplex.com/IIRF ). Главное - что он полностью совместим с синтаксисом mod_rewrite под Apache. Таким образом мигрировать на IIS очень становится не легко, а очень легко.
Только одно замечание. Необходимо вручную добавить ко всем выражениям в RewriteRule полный путь от корня сайта, т.к. в .htaccess этого не делается (путь берется относительно месторасположения самого .htaccess). Если правила итак в корне, то необходимо добавить в начало каждого выражения прямой слеш - “/”.
Таким макаром я очень успешно мигрировал свой DLE с апача на IIS (просто скопировал содержимое их файла .htaccess в конфиг модуля и добавил к ним слеши). Все работает прекрасно.
За ссылку респект! ))
Только будте внимательны при выборе хостинга, чтобы он разрешил вам использовать свои фильтры, идеальный вариант - выделенный сарвер.