Аналог mod_rewrite для IIS

MiRacLe

просто Чудо
Аналог mod_rewrite для IIS

Фильтр ISAPI_Rewrite является функциональным аналогом модуля mod_Rewrite для Apache — он предназначен для изменения запрашиваемых с сервера URI на базе шаблонов. В настоящее время бета-версия фильтра доступна для скачивания с сайта.

Lite Version (free), Full Version - Shareware

Производитель: http://www.isapirewrite.com/

P.S. Быть может будет полезным поклонникам IIS
 

kruglov

Новичок
есть ограничения:
* не ловится POST и прочая в PHP-скриптах (переменные $_POST, $_GET и т.д. пусты). Хотя QUERY_STRING можно выцепить из $_SERVER['PATH_INFO']
* нет возможности делать правила в зависимости от существования и типа запрошенного ресурса
(RewriteCond %{REQUEST_FILENAME} !-f и пр.)

p.s. инфа с форума разработчиков.
 

slach

Новичок
есть вполне приемлимые решения
404й обработчик под IIS вполне грамотно работает

----------вот кусок из ASP доки ---
Поскольку ни файлы, ни каталоги реально не существуют на сайте, IIS выдаст ошибку 404, которую нам и необходимо будет обработать.

В оснастке "Диспетчер служб Интернета" найдите созданный Вами виртуальный Web-узел и вызовите его "Свойства". На вкладке "Специальные ошибки" найдите ошибку HTTP 404. Измениете ее свойства на "Тип сообщения" - Адрес URL и в качестве адреса для страницы обработки введите относительный адрес /404.asp и нажмите OK. Теперь, при возникновении 404-ой ошибке IIS будет вызывать сценарий, хранящийся в 404.asp.

Важно помнить! Замена в "горячем режиме" будет осуществляться только для незарегистрированных расширений, то есть тех, которые не обрабатываются каким-либо ISAPI-приложением. Например файлы с расширением .asp обрабатываются asp.dll, а .shtm - приложением ssinc.dll и т.д. Поэтому для таких файлов будет осуществляться прямой редирект на страницу 404.asp. Чтобы этого не происходило см. например вот этот FAQ. Но поскольку в этом случае сценарий будет открываться дважды — один раз сервером и один раз обработчиком сценариев, — включение параметра "Проверка наличия файла" приведет к некоторому снижению производительности. Поэтому, в нашем примере мы и используем расширение .html (которое при настройках "по умолчанию" не обрабатывается ни одним из ISAPI-приложенем).
----


А вот кусок очень старого PHP кода который у меня в index.php под IIS занимается разбором УРЛа
PHP:
if (strstr($_SERVER['SERVER_SOFTWARE'],'IIS')) {
 $cfg['serversoftware']='IIS';
 if (preg_match('/^404;/',$_SERVER['QUERY_STRING'])) {
  $cfg['fullurl'] = preg_replace('/^404;/','',$_SERVER['QUERY_STRING']);
  $cfg['parseurl'] = parse_url($cfg['fullurl']);
  $cfg['uri'] = preg_replace('/^404;http:\/\/'.$_SERVER['SERVER_NAME'].str_replace('/','\/',$cfg['rootdir']).'/','',$_SERVER['QUERY_STRING']);
  $cfg['uri'] = preg_replace('/\?(.*)$/','',$cfg['uri']);
 } else {
  $cfg['fullurl'] = 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].'/';
  $cfg['parseurl'] = parse_url($cfg['fullurl']);
  $cfg['uri']='/';
 }
 $cfg['url'] = 'http://'.$cfg['parseurl']['host'].':'.$cfg['parseurl']['port'].$cfg['rootdir'].$cfg['uri'];
 $cfg['fullurl'] = $cfg['url'].'?'.getenv('QUERY_STRING');
//разбираемся с _GET, _POST нормально передается ИТАК =)
 foreach($_GET as $k=>$v) {
   $cfg['varname'] = preg_replace('/^(.*)\?/','',$k);
   $$cfg['varname']=$v;
 }
-~{}~ 29.09.05 08:24:

сооветсвенно 404.asp меняем на index.php
получаем аналог апачевого
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(css)|(js)|(gif)|(jpg)$
RewriteRule ^(.+) index.php?uri=$1&%{QUERY_STRING} [L]
 
Сверху