Назад | Перейти на главную страницу

Как управлять документом по умолчанию с модулем перезаписи на IIS7?

Еще несколько месяцев назад я использовал IIS 6, где я мог добавлять разные документы по умолчанию на каждый веб-сайт, который физически находится в одном каталоге. Начиная с II7, который добавляет значение документа по умолчанию в веб-конфигурацию, я не мог использовать такую ​​технику, так как web.config был изменен для всего каталога.

Итак, я нашел простое решение с модулем перезаписи для изменения документа по умолчанию для каждого домена.

 <defaultDocument enabled="false" />
        <rewrite>
            <rewriteMaps>
                <rewriteMap name="ResolveDefaultDocForHost">
                      <add key="site1.com" value="Default1.aspx" />                    
        <add key="site2.com" value="Default2.aspx" />
                </rewriteMap>
            </rewriteMaps>
            <rules>
    <rule name="DefaultDoc Redirect If No Trailing Slash" stopProcessing="true"> 
      <match url=".*[^/]$" /> 
      <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" /> 
      </conditions> 
      <action type="Redirect" url="{R:0}/" /> 
    </rule> 
    <rule name="PerHostDefaultDocSlash" stopProcessing="true"> 
      <match url="$|.*/$" /> 
      <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" /> 
     <add input="{ResolveDefaultDocForHost:{HTTP_HOST}}" pattern="(.+)" /> 
      </conditions> 
      <action type="Rewrite" url="{R:0}{C:1}" appendQueryString="true" /> 
    </rule> 
            </rules>
        </rewrite>

Теперь у меня есть еще две проблемы.

Во-первых, я не могу использовать каноническое переопределение URL-адресов, если я установлю его, то site1.com и site2.com будут перенаправлены на www.site1.com вместо www. для каждого. Вторая проблема заключается в том, что в физическом каталоге site1 'и site2' есть каталог с именем members, в котором Default.aspx всегда является документом по умолчанию, независимо от того, какое имя домена было использовано. Это тоже не работает.

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

У вас есть два варианта. Один из них - продолжать идти по пути, по которому вы идете. На высоком уровне проблема с перезаписью канонического URL связана с действием. Вы можете использовать {HTTP_HOST}, поэтому действие должно иметь вид www. {HTTP_HOST} / {URL}. Это делает его динамическим на основе введенного доменного имени, а не на конкретное имя.

Однако, возможно, вам будет проще продолжить использование документов по умолчанию. Способ сделать это для каждого сайта - использовать теги местоположения в applicationHost.config. Вы не можете сделать это стандартным способом в IIS Manager, потому что, как вы указали, он использует одну и ту же конфигурацию для всех сайтов. Есть 3 довольно простых способа сделать это (не считая вариантов программирования). Один - с редактором конфигурации, другой - с appcmd, а третий - с блокнотом или редактором напрямую.

Я опишу здесь, как это сделать с помощью Configuration Manager. Сначала убедитесь, что он у вас установлен: http://www.iis.net/download/AdministrationPack

Затем с помощью диспетчера IIS перейдите на сайт, для которого вы хотите изменить документ по умолчанию. Откройте Configuration Manager. В верхнем левом раскрывающемся списке измените на system.webServer / defaultDocument. В правом верхнем углу не забудьте переключиться на параметр ApplicationHost.config. В главном окне выберите строку «файлы» и нажмите (...). В остальном все просто.