Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] IIS7 - создание субдоменов с помошью rewrite module (http://forum.oszone.net/showthread.php?t=170097)

Magikanin2006 14-03-2010 14:33 1368379

IIS7 - создание субдоменов с помошью rewrite module
 
Коллеги,

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/micros...et/3194877.htm
Установил mod_rewrite от microsoft (http://www.iis.net/expand/URLRewrite)
взял пример парактически без изменений (только example.com и www.highspeed.com??) заменил на имя своего домена.
Не сработало - выдает ошибку в предпоследнем правиле.
Пытаюсь разобраться в mod_rewrite но пока, что без результатов.
Прошу помочь найти ошибку в тексте примера или обьяснить как сделать правильно.

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

Sham 14-03-2010 19:36 1368565

насколько вижу, там много ошибок... либо поищите другие примеры, либо задавайте вопрос по каждому конкретному правилу.

P.S. вместо прямой ссылки на файл дайте ссылку на страницу загрузки.

Magikanin2006 15-03-2010 13:59 1369138

написал пару правил:
Код:

<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 1369272

Цитата:

Цитата Magikanin2006
написал пару правил: »

вижу только одно
Цитата:

Цитата Magikanin2006
перенесите этот топик в ветку про rewrite »

Та ветка о mod_rewrite apache.

Magikanin2006 18-03-2010 08:48 1371266

Коллеги.
В продолжение темы - прошу помощи:
Итак задача организации автоматичсеких субдоменов решилась правилом:
Код:

<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 1371980

имхо в первое правило нужно условие добавить c отрицательным выражением
Код:

<add input="{REQUEST_URI}" pattern="!^/img/" />

Magikanin2006 19-03-2010 09:25 1372120

Как организовать логическую конструкцию (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 1372155

Два одинаковых правила - не айс.
Лучше поработать с регулярным выражением, примерно так:
Код:

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


Время: 17:26.

Время: 17:26.
© OSzone.net 2001-