Партнерки вебмастерам

Баннер

Кто онлайн

Сейчас 72 гостей онлайн

Статистика

Архив содержит 29 файлов в 11 категориях. На данный момент файлы скачаны 103404 раз.
Установка и перенос UMI.CMS на IIS PDF Печать E-mail

Доброго времени суток!

Я занимаюсь разработкой сайтов чуть больше года, при этом в основном приходилось использовать UMI.CMS. Текущие версии этой CMS рассчитаны на использование в связке php+MySQL+Apache, хотя вроде также ведётся разработка asp.net-версии для IIS. Я решил попробовать установить php-версию этой CMS на IIS. Поскольку опыта работы с IIS у меня нет, я потратил на это весь вечер. В результате удалось добиться требуемого результата.

Начнём с того, что нам нужно установить IIS, SEF-модуль (Microsoft URL Rewrite Module), php, настроить IIS для работы с php, а также установить MySQL. Всё, кроме последнего, проще всего сделать с помощью Microfost Web Platform Installer. Также дополнительно можно установить PHP Manager for IIS. Установка MySQL производится отдельно, но большой проблемы это также не составляет.

Далее нужно подключить xsl-расширение php. В той версии, которая входит в Web Platform Installer, нужная библиотека отсутствует, поэтому её нужно добавить самому. Если Вы устанавливали php вручную, то такой проблемы быть не должно.

По умолчанию Web Platform Installer устанавливает версию 5.2.14 non thread safe. Нам нужна аналогичная версия (5.2). Недавно вышел новый билд, 5.2.15, можно использовать его. Из всего архива нам нужна dll-ка php_xsl.dll, которая расположена в папке ext. Её нужно поместить в аналогичную папку ext уже установленной версии php (скорее всего, путь C:Program FilesPHPext). При желании можно скопировать и остальные библиотеки.

Теперь нужно подключить эту библиотеку. Первый вариант - добавить или раскомментировать следующую строку в php.ini:

extension=php_xsl.dll

Если Вы установили PHP Manager for IIS, то сделать это можно через графический интерфейс в IIS Manager'e:

На всякий случай лучше проверить в phpinfo, успешно ли подключилась библиотека. Если её там нет, возможно, Вы использовали не ту версию php. Если всё в порядке, перейдём к следующему шагу.

Перед установкой CMS нужно создать для неё новую бд. Для этого можно использовать phpMyAdmin.

Теперь нужно подготовить CMS-дистрибутив. Free-версию (Start) с бесплатным ключом или Pro-версию с триальным ключом можно получить на офф. сайте. Дистрибутив нужно распаковать в корневую папку сайта, после чего задать права доступа к файлам. Теперь можно переходить к установке.

Если домен Вашего локального сайта localhost, то адрес скрипта установки будет следующим:http://localhost/install.php. Сперва нужно принять лицензионное соглашение, затем ввести ключ, после этого выбрать пакет (как правило он один в списке), ввести параметры подключения к MySQL (хост сервера, логин для подключение, пароль и имя бд). Начнётся процесс установки. Если при этом возникнет ошибка, проверьте права доступа к файлам в папке сайта. Если всё прошло успешно, то после этого нужно ввести логин и пасс админской учётки. На следующей странице можно выбрать установку какого-либо демо-сайта или чистой CMS, после чего установка будет завершена.

Теперь нужно настроить маршрутизацию. Поскольку CMS рассчитана на использование Apache, а не IIS, то там это реализовано через mod_rewrite. В IIS этого можно добиться через файл web.config в корне сайта. К счастью, SEF-модуль в IIS предоставляет возможность генерации этого файла на основе .htaccess, используемого в Apache. На скринах ниже показано, как получить этот файл

Исходный файл выглядит следующим образом:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(sys-temp|cache|xmldb|static|packages)/.*$ /500/ [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^robots.txt$  /sbots.php?path=$1%{QUERY_STRING} [L]

RewriteRule ^config.ini$ / [L,R]

RewriteCond %{REQUEST_URI} !^styles
RewriteCond %{REQUEST_URI} !^css
RewriteCond %{REQUEST_URI} !.css
RewriteCond %{REQUEST_URI} !^js
RewriteCond %{REQUEST_URI} !.js
RewriteCond %{REQUEST_URI} !^images
RewriteCond %{REQUEST_URI} !^webstat
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*).xml$ index.php?xmlMode=force&path=$1&%{QUERY_STRING} [L]

RewriteRule ^(udata|upage|uobject|ufs|usel|ulang|utype|umess|uhttp):?(//)?(.*)$ releaseStreams.php?scheme=$1&path=$3?%{QUERY_STRING} [L]


RewriteCond %{REQUEST_URI} !^styles
RewriteCond %{REQUEST_URI} !^css
RewriteCond %{REQUEST_URI} !.css
RewriteCond %{REQUEST_URI} !^js
RewriteCond %{REQUEST_URI} !.js
RewriteCond %{REQUEST_URI} !^images

RewriteCond %{REQUEST_URI} !(.ico|.ICO)$
RewriteCond %{REQUEST_URI} !(.jpg|.JPG)$
RewriteCond %{REQUEST_URI} !(.jpeg|.JPEG)$
RewriteCond %{REQUEST_URI} !(.png|.PNG)$
RewriteCond %{REQUEST_URI} !(.gif|.GIF)$
RewriteCond %{REQUEST_URI} !(.css|.CSS)$
RewriteCond %{REQUEST_URI} !(.js|.JS)$

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php?path=$1&%{QUERY_STRING} [L]


RewriteCond %{REQUEST_URI} (.ico|.ICO)$
RewriteCond %{REQUEST_URI} (.jpg|.JPG)$
RewriteCond %{REQUEST_URI} (.jpeg|.JPEG)$
RewriteCond %{REQUEST_URI} (.png|.PNG)$
RewriteCond %{REQUEST_URI} (.gif|.GIF)$
RewriteCond %{REQUEST_URI} (.css|.CSS)$
RewriteCond %{REQUEST_URI} (.js|.JS)$

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ [R=404]


‹IfModule mod_mime.c›
AddType application/x-java-applet .class
AddType text/x-component .htc
‹/IfModule›

‹IfModule mod_security.c›
SecFilterScanPOST Off
‹/IfModule›

‹Files "whatsnew.txt"›
Deny from all
‹/Files›

После преобразования получаем примерно такой файл:

‹?xml version="1.0" encoding="UTF-8"?›
‹configuration›
‹system.webServer›
‹rewrite›
‹rules›
‹rule name="Импортированное правило 1" stopProcessing="true"›
‹match url="^(sys-temp|cache|xmldb|static|packages)/.*$" ignoreCase="false" /›
‹conditions logicalGrouping="MatchAll"›
‹add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" /›
‹/conditions›
‹action type="Rewrite" url="/500/" /›
‹/rule›
‹rule name="Импортированное правило 2" stopProcessing="true"›
‹match url="^robots.txt$" ignoreCase="false" /›
‹conditions logicalGrouping="MatchAll"›
‹add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /›
‹/conditions›
‹action type="Rewrite" url="/sbots.php?path={R:1}{QUERY_STRING}" appendQueryString="false" /›
‹/rule›
‹rule name="Импортированное правило 3" stopProcessing="true"›
‹match url="^config.ini$" ignoreCase="false" /›
‹action type="Redirect" url="/" redirectType="Found" /›
‹/rule›
‹rule name="Импортированное правило 4" stopProcessing="true"›
‹match url="^(.*).xml$" ignoreCase="false" /›
‹conditions logicalGrouping="MatchAll"›
‹add input="{URL}" pattern="^styles" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^css" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern=".css" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^js" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern=".js" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^images" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^webstat" ignoreCase="false" negate="true" /›
‹add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /›
‹/conditions›
‹action type="Rewrite" url="index.php?xmlMode=force&path={R:1}&{QUERY_STRING}" appendQueryString="false" /›
‹/rule›
‹rule name="Импортированное правило 5" stopProcessing="true"›
‹match url="^(udata|upage|uobject|ufs|usel|ulang|utype|umess|uhttp):?(//)?(.*)$" ignoreCase="false" /›
‹action type="Rewrite" url="releaseStreams.php?scheme={R:1}&path={R:3}?{QUERY_STRING}" appendQueryString="false" /›
‹/rule›
‹rule name="Импортированное правило 6" stopProcessing="true"›
‹match url="^(.*)$" ignoreCase="false" /›
‹conditions logicalGrouping="MatchAll"›
‹add input="{URL}" pattern="^styles" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^css" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern=".css" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^js" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern=".js" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^images" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.ico|.ICO)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.jpg|.JPG)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.jpeg|.JPEG)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.png|.PNG)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.gif|.GIF)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.css|.CSS)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.js|.JS)$" ignoreCase="false" negate="true" /›
‹add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /›
‹/conditions›
‹action type="Rewrite" url="index.php?path={R:1}&{QUERY_STRING}" appendQueryString="false" /›
‹/rule›
‹rule name="Импортированное правило 7"›
‹match url="^(.*)$" ignoreCase="false" /›
‹conditions logicalGrouping="MatchAll"›
‹add input="{URL}" pattern="(.ico|.ICO)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.jpg|.JPG)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.jpeg|.JPEG)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.png|.PNG)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.gif|.GIF)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.css|.CSS)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.js|.JS)$" ignoreCase="false" /›
‹add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /›
‹/conditions›
‹action type="Rewrite" url="[R=404]" /›
‹/rule›
‹/rules›
‹/rewrite›
‹/system.webServer›
‹/configuration›

После этого CMS уже будет работоспособной. Но на этом правка файла не заканчивается. Дело в том, что в UMI для ограничения доступа к служебным файлам используются .htaccess-файлы в соответствующих папках. Насколько я знаю, в IIS web.config располагается только в корне сайта, поэтому все настройки разместим в нём. Нам нужно ограничить доступ к нескольким папкам в корне сайта. Частичное ограничение уже есть в первом правиле представленного файла, поэтому модифицировать будем его. Изначально он выглядит так:

‹rule name="Импортированное правило 1" stopProcessing="true"›
‹match url="^(sys-temp|cache|xmldb|static|packages)/.*$" ignoreCase="false" /›
‹conditions logicalGrouping="MatchAll"›
‹add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" /›
‹/conditions›
‹action type="Rewrite" url="/500/" /›
‹/rule›

Расширим регулярное выражение в атрибует url тега match следущим образом:

^(sys-temp|cache|xmldb|static|packages|classes|install-libs|install-static|isntall-temp|libs|smu|tpls|umaps|usels|utils|xsl|xsltTpls)/.*$

В результате исходники и шаблоны будут закрыты от http-запросов. Также я изменил тег action, чтобы вместо ошибки сервера 404, пользователь попадал на страницу сайта, на которой можно разместить нужную Вам информацию:

‹action type="Rewrite" url="/notfound/" /›

После всех изменений web.config имеет следующий вид:

‹?xml version="1.0" encoding="UTF-8"?›
‹configuration›
‹system.webServer›
‹rewrite›
‹rules›
‹rule name="Импортированное правило 1" stopProcessing="true"›
‹match url="^(sys-temp|cache|xmldb|static|packages|classes|install-libs|install-static|isntall-temp|libs|smu|tpls|umaps|usels|utils|xsl|xsltTpls)/.*$" ignoreCase="false" /›
‹conditions logicalGrouping="MatchAll"›
‹add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" /›
‹/conditions›
‹action type="Rewrite" url="/notfound/" /›
‹/rule›
‹rule name="Импортированное правило 2" stopProcessing="true"›
‹match url="^robots.txt$" ignoreCase="false" /›
‹conditions logicalGrouping="MatchAll"›
‹add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /›
‹/conditions›
‹action type="Rewrite" url="/sbots.php?path={R:1}{QUERY_STRING}" appendQueryString="false" /›
‹/rule›
‹rule name="Импортированное правило 3" stopProcessing="true"›
‹match url="^config.ini$" ignoreCase="false" /›
‹action type="Redirect" url="/" redirectType="Found" /›
‹/rule›
‹rule name="Импортированное правило 4" stopProcessing="true"›
‹match url="^(.*).xml$" ignoreCase="false" /›
‹conditions logicalGrouping="MatchAll"›
‹add input="{URL}" pattern="^styles" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^css" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern=".css" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^js" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern=".js" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^images" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^webstat" ignoreCase="false" negate="true" /›
‹add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /›
‹/conditions›
‹action type="Rewrite" url="index.php?xmlMode=force&path={R:1}&{QUERY_STRING}" appendQueryString="false" /›
‹/rule›
‹rule name="Импортированное правило 5" stopProcessing="true"›
‹match url="^(udata|upage|uobject|ufs|usel|ulang|utype|umess|uhttp):?(//)?(.*)$" ignoreCase="false" /›
‹action type="Rewrite" url="releaseStreams.php?scheme={R:1}&path={R:3}?{QUERY_STRING}" appendQueryString="false" /›
‹/rule›
‹rule name="Импортированное правило 6" stopProcessing="true"›
‹match url="^(.*)$" ignoreCase="false" /›
‹conditions logicalGrouping="MatchAll"›
‹add input="{URL}" pattern="^styles" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^css" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern=".css" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^js" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern=".js" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="^images" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.ico|.ICO)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.jpg|.JPG)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.jpeg|.JPEG)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.png|.PNG)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.gif|.GIF)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.css|.CSS)$" ignoreCase="false" negate="true" /›
‹add input="{URL}" pattern="(.js|.JS)$" ignoreCase="false" negate="true" /›
‹add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /›
‹/conditions›
‹action type="Rewrite" url="index.php?path={R:1}&{QUERY_STRING}" appendQueryString="false" /›
‹/rule›
‹rule name="Импортированное правило 7"›
‹match url="^(.*)$" ignoreCase="false" /›
‹conditions logicalGrouping="MatchAll"›
‹add input="{URL}" pattern="(.ico|.ICO)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.jpg|.JPG)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.jpeg|.JPEG)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.png|.PNG)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.gif|.GIF)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.css|.CSS)$" ignoreCase="false" /›
‹add input="{URL}" pattern="(.js|.JS)$" ignoreCase="false" /›
‹add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /›
‹/conditions›
‹action type="Rewrite" url="[R=404]" /›
‹/rule›
‹/rules›
‹/rewrite›
‹/system.webServer›
‹/configuration›

Возможно, я упустил ещё какие-то rewrite'ы, которые присутствуют в исходной CMS, но скорей всего, добавить их в web.config не будет проблемой.

Перенос уже имеющейся CMS производится похожим образом. Аналогично нужно подготовить IIS + php + MySQL, затем перенести файлы CMS в корень сайта, настроить права доступа к ним, залить дамп бд (например, с помощью dumper'a или через phpMyAdmin) и настроить rewrite_rules, как описано выше. Скорей всего, при этом понадобится ввести новый ключ для CMS, после чего она будет нормально функционировать.