Показать полную графическую версию : [решено] IIS7 - создание субдоменов с помошью rewrite module
Magikanin2006
14-03-2010, 14:33
Коллеги,
windows 2008 32bit +IIS7 с последними обновлениями...
Хочу создать следующее:
www.site.com расположен в каталоге d:\wwwroot
sub1.site.com расположен в каталоге d:\wwwroot\sub1
sub2.site.com расположен в каталоге d:\wwwroot\sub2
...и т.д.
т.е. пользователь набрав в браузере ссылку sub2.site.com получает содержимое d:\wwwroot\sub2
и при этом думает что работает с доменом 3 уровня.
прописал в файле hosts для экпериментов
127.0.0.1 www.site.com
127.0.0.1 sub1.site.com
127.0.0.1 sub2.site.com
нашел в интренете статью: http://www.webmasterworld.com/microsoft_asp_net/3194877.htm
Установил mod_rewrite от microsoft (http://www.iis.net/expand/URLRewrite)
взял пример парактически без изменений (только example.com и www.highspeed.com??) заменил на имя своего домена.
Не сработало - выдает ошибку в предпоследнем правиле.
Пытаюсь разобраться в mod_rewrite но пока, что без результатов.
Прошу помочь найти ошибку в тексте примера или обьяснить как сделать правильно.
Заранее благодарен.
насколько вижу, там много ошибок... либо поищите другие примеры, либо задавайте вопрос по каждому конкретному правилу.
P.S. вместо прямой ссылки на файл дайте ссылку на страницу загрузки.
Magikanin2006
15-03-2010, 13:59
написал пару правил:
<rule name="SubDomain" stopProcessing="false">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(?!www)(\w+)\.site\.com$" />
</conditions>
<action type="Rewrite" url="/{C:1}/" />
</rule>
заработало. вопрос закрыт. Спасибо.
перенесите этот топик в ветку про rewrite, если будет возможность.
написал пару правил: »
вижу только одно
перенесите этот топик в ветку про rewrite »
Та ветка о mod_rewrite apache.
Magikanin2006
18-03-2010, 08:48
Коллеги.
В продолжение темы - прошу помощи:
Итак задача организации автоматичсеких субдоменов решилась правилом:
<rule name="rewrite subdomain" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^(?!www)(\w+)\.site\.org$" />
<add input="{HTTP_HOST}" pattern="www\.(?!www)(\w+)\.site\.org$" />
</conditions>
<action type="Rewrite" url="/{C:1}/{R:1}" logRewrittenUrl="true" />
</rule>
А как написать исключение из этих правил?
например есть папка /img/ которая отображается как www.site.org/img/
хочу чтобы онаже отображалась в случае user1.site.org/img/
Проблема в том, что при таком url идет поиск файлов в user1/img/. а там такой папки нет...
Пытался перед правилом субдоменов прописать следующее:
<rule name="disable rewrite (/img/*)" enabled="true" stopProcessing="true">
<match url="(/img/(\w+))" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="{R:1}" appendQueryString="true" logRewrittenUrl="true" />
</rule>
Не срабатывает.
Где я ошибаюсь?
Заранее благодарен
имхо в первое правило нужно условие добавить c отрицательным выражением
<add input="{REQUEST_URI}" pattern="!^/img/" />
Magikanin2006
19-03-2010, 09:25
Как организовать логическую конструкцию (a+b)*c*d я не понял. Поэтому разбил на 2 правила:
<rule name="rewrite subdomain" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_URI}" pattern="^/img/" negate="true" />
<add input="{REQUEST_URI}" pattern="^/css/" negate="true" />
<add input="{HTTP_HOST}" pattern="^(?!www)(\w+)\.site\.org$" />
</conditions>
<action type="Rewrite" url="/_{C:1}/{R:1}" logRewrittenUrl="true" />
</rule>
<rule name="rewrite www subdomain" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_URI}" pattern="^/img/" negate="true" />
<add input="{REQUEST_URI}" pattern="^/css/" negate="true" />
<add input="{HTTP_HOST}" pattern="www\.(?!www)(\w+)\.site\.org$" />
</conditions>
<action type="Rewrite" url="/_{C:1}/{R:1}" logRewrittenUrl="true" />
</rule>
В таком варианте из подстановки исключается /img/ и /css/
Спасибо за помощь.
Два одинаковых правила - не айс.
Лучше поработать с регулярным выражением, примерно так:
<add input="{HTTP_HOST}" pattern="^(?:www\.)?(\w+)(?<!www)\.site\.org$" />
Если синтаксис регулярных выражений в модуле - PCRE, то будет работать.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.