ISAPI Rewrite модул за IIS

В Apache (web сървър)има един много полезен модул. Казва се mod_rewrite. С негова помощ можете да модифицирате хедърите на пристигащите HTTP заявки на базата на регулярни изрази и разнообразни други условия. Ето един малък пример:

[code]RewriteCond %{HTTP_USER_AGENT} msie.*[I]
RewriteRule ^/$ /page.msie.html [L]

RewriteCond %{HTTP_USER_AGENT} firefox.* [I]
RewriteRule ^/$ /page.firefox.html [L]
[/code]

Тези два реда се четат така: ако браузерът е MS Internet Explorerзамести всички заявкиза “/” към страницата “/page.msie.html”. А въпросният документ може да използва възможности, специфични само за IE. В случай, че отворите “/” от Firefox, то ще се изпълни само второто (първото правило RewriteCondе false) и ще се отвори страница, специфична за Firefox.

Обаче, горните условия се разбират само от Apache. MS Internet Information Server (IIS) не разполага с вградени подобни възможности. Но за щастиеIIS е разширяеми в Интернет се предлагат rewrite модули във вид на ISAPI филтри, но повечето са комерсиални и с непълна функционалност.

Един от известните и безплатниrewrite модули за IIS е IonicIsapiRewriter, който е реализиран като ISAPI филтър. Той е много близък като функционалност и синтаксис до rewrite модула за Apache. Двете години разработване и тестове са го направили стабилна и популярна приставка:

Поведение.

ВApache горния пример с правила се поставя във файл, който се казва .htaccess. При IonicIsapiRewriter правилата се поставят във файл, имащ името на .DLL файлана филтъра (IsapiRewrite4.dll), но с разширение .ini. И двата файла трябва да се намират в една и съща папка. Ето я и очевидната разлика: .htaccess може да се сложи в директорийната структура на web документите, а IsapiRewrite4.ini в съвсем отделна от web страниците папка.

Има и още нещо:

.htaccess влияе на поведението на Apache в зависимост от това в коя папка е поставен. И тъй като всеки web сайт (обикновено) е сложен в отделна папка, то можете да поставите различен .htaccess, който се отразява на съответната web страница. При IIS ситуацията принципно е подобна, но ISAPI филтъра е само един? Решението е да направите някаква директорийна структура за всеки от сайтовете си и там да запишете по едно копие на IsapiRewrite4.dll и IsapiRewrite4.ini. След това в конзолата на IIS зареждате ISAPI филтъра по отделно за всеки сайт.Така можете да постигнете ефект, подобен на този приApache.

Windows XP е окомплектован с орязана версия на IIS. Нежеланите ефекти са два:

  • можете да имате само един web сайт;
  • едновременните връзки към сайта не могат да надвишават 10.

* В сървърните версии няма подобни ограничения.

Инсталиране.

За демонстрацията използвам:

  • Windows XP, с IIS 5.1;
  • един web сайт;
  • D:\Download\web\server\iis\isapi\iir – за сваляне на архива с IonicIsapiRewriter;
  • D:\www\public – за web документите;
  • D:\www\isapi_iir – за IsapiRewrite4.dll и IsapiRewrite4.ini

* Папките са само примерни. Можете да ги промените с такива, по Ваше желание.

  1. Свалете IonicIsapiRewriter отhttp://www.codeplex.com/IIRF/Release/ProjectReleases.aspx?ReleaseId=13940в D:\Download\web\server\iis\isapi\iir;
  2. Разпакетирайте архива в същата папка;
  3. Копирайте IsapiRewrite4.dll от D:\Download\web\server\iis\isapi\iir\IonicIsapiRewriter-1.2.14\lib в D:\www\isapi_iir;
  4. Отворете конзолата на IIS: Control Panel -> Administrative tools -> Internet Information Services;
  5. Разтворете дървовидната структура до: (local computer) -> Web Sites -> Default Web Site;
  6. С десния бутон на мишката върху “Default Web Site” изберете Properties;
  7. Щракнете върху табчето “ISAPI Filters” и изберете бутона ADD. Въведете:
    1. Filter Name: Ionic Rewriter
    2. Executable: D:\www\isapi_iir\IsapiRewrite4.dll
  8. Потвърдете два пъти с OK;
  9. От конзолата на IIS изберете: (local computer) -> all tasks -> restart IIS… и потвърдете с OK. Изчакайте процесът да завърши;
  10. Ако всичко е наред в табчето “ISAPI Filters”, вляво от “Ionic Rewriter” ще има зелена стрелка, сочеща нагоре.

Вече можете да конфигурирате IsapiRewrite4.ini по свое желание.

Хубавото в новата версия на IonicIsapiRewriter е, че след записване на промените в IsapiRewrite4.ini конфигурацията се зарежда и отразява автоматично т.е. не е нужно да рестартирате целия IIS.

За тестване направих следната малка конфигурация:

[code]RewriteLog D:\Logs\IIRF\iirfLog.out.txt
RewriteLogLevel 5

RewriteCond %{HTTP_USER_AGENT} msie.*[I]
RewriteRule ^/$ /page.ie.html [L]

RewriteCond %{HTTP_USER_AGENT} firefox.* [I]
RewriteRule ^/$ /page.firefox.html [L][/code]

Страниците съдържат следния текст:

  • page.ie.html: “You are using Internet Explorer”
  • page.ff.html: “You are using Mozilla Firefox”

След това стартирах IE и отворих адреса: http://localhost/ – появи се надпис “You are using Internet Explorer”
Повторих същото с Firefox и видях “You are using Mozilla Firefox”

За допълнителна информация и начините за конфигурация разгледайте файла:
D:\Download\web\server\iis\isapi\iir\IonicIsapiRewriter-1.2.14\Readme-X.Y.txt, където X и Y описват версията на IonicIsapiRewriter.

3 thoughts on “ISAPI Rewrite модул за IIS

  1. ъъъъ Apache си върви без драми и в/у Windows (http://httpd.apache.org/docs/1.3/windows.html). Съгласен съм, че няма да се интегрират всичките MS али-бали на 100% ама и OpenSource али-балите са с лопата да ги ринеш пък и доста от тях са MS compatible . Имам предвид плащането на допълнителни модули предимно де… или ти пък си визирал нещо по-така или ти е трябвало нещо по-секси за някой интересен проект? Btw в/у какво работим в момента Пешко? Нещо увлекателно и забавно напоследък?

  2. За апачито е ясно че върви по вин, но тази приставка е удобна ако не искаш да пипаш съществуваща голяма IIS структура. И ако съдим по факта, че ме мързи да си инсталирам апачи, то какво остава за горното 🙂 🙂 🙂
    А джвъчката намерих покрай едни къстъм ISAPI истории 😉

  3. Аз лично с няколко апачета под Win2003 съм имал различни, и подобни проблеми, отдавна не разчитам на Апаче под Windows за нищо, да не говорим за production среда. От IIS6 нагоре под Win няма добра алтернатива. IIS е втория по разпространение така или иначе.
    Моментната версия на IonicRewriter поддържала per-virtual directory ini файлове, подобни на .htaccess, пробвах го под IIS6, но нещо не заработи както трябва. А за съжаление не намирам безплатни rewriters за IIS6. За IIS7, който ползвам основно, за радост има разширение от самите MS. Но този Ionic нещо не ми вдъхва доверие след като не можах от раз да го подкарам. Може да съм поуморен, не знам, но първото ми впечатление е смесено (имайки предвид че може в мен да е вината) 🙂 .

Leave a Reply

Your email address will not be published. Required fields are marked *

*