Войти

Показать полную графическую версию : [решено] 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 но пока, что без результатов.
Прошу помочь найти ошибку в тексте примера или обьяснить как сделать правильно.

Заранее благодарен.

Sham
14-03-2010, 19:36
насколько вижу, там много ошибок... либо поищите другие примеры, либо задавайте вопрос по каждому конкретному правилу.

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, если будет возможность.

Sham
15-03-2010, 17:24
написал пару правил: »
вижу только одно
перенесите этот топик в ветку про 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>
Не срабатывает.

Где я ошибаюсь?
Заранее благодарен

Sham
19-03-2010, 01:42
имхо в первое правило нужно условие добавить 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/

Спасибо за помощь.

Sham
19-03-2010, 10:23
Два одинаковых правила - не айс.
Лучше поработать с регулярным выражением, примерно так:
<add input="{HTTP_HOST}" pattern="^(?:www\.)?(\w+)(?<!www)\.site\.org$" />
Если синтаксис регулярных выражений в модуле - PCRE, то будет работать.




© OSzone.net 2001-2012