Еще несколько месяцев назад я использовал 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. В главном окне выберите строку «файлы» и нажмите (...). В остальном все просто.