Перезапись URL-адресов IIS 7 и два домена

Я писал этот вопрос, и в процессе он заставил меня немного подумать, и я сам ответил на него, хотя я до сих пор не совсем понимаю, почему он решил его.

У меня есть учетная запись на общем хосте с двумя зарегистрированными доменами. Я использую стек Asp.Net для запуска нескольких вещей, таких как блог и еще один сайт, который я планирую в конечном итоге запустить. Оба моих домена указывают на корень; первый — это оригинал, который я использовал для регистрации, второй — указатель корневого домена, который я добавил. Вот как я хочу, чтобы он вел себя:

Структура каталога:

Root                      (www.domain1.com)
Root --\ Blog             (www.domain1.com/blog)
Root --\ Site2            (should be directed here if www.domain2.com)
Root --\ Site2 --\ Junk   (www.domain2.com/junk)

Прямо сейчас, если вы введете www.domain1.com или www.domain1.com/blog, это будет работать, как и ожидалось, и меня это устраивает. Для www.domain2.com у меня настроено правило перезаписи следующим образом (из web.config):

<rule name="Domain2">
    <match url="(.*)(/)?" ignoreCase="false" />
    <conditions logicalGrouping="MatchAll">
        <add input="{HTTP_HOST}" pattern="(www\.)?domain2\.com" ignoreCase="false" />
    </conditions>
    <action type="Rewrite" url="/site2/{R:1}" />
</rule>

Предполагается, что это правило соответствует любому пути, если хост — domain2.com, выберите путь к запрошенному ресурсу и правильно отформатируйте его. Поэтому, когда кто-то вводит www.domain2.com/junk/default.aspx в IIS, это разрешается в www.domain2.com/site2/junk/default.aspx без ведома пользователя. Это в основном работает так, как заявлено, за исключением случаев, когда пользователь не вводит косую черту в конце вложенной папки. IE:

www.domain2.com (работает)
www.domain2.com/ (работает)
www.domain2.com/junk/ (работает)
www.domain2.com/junk (не работает) Это не работает!) IIS 7 теряет свои мозги здесь и форматирует его как www.domain2.com/site2/junk, потому что второй запрос автоматически выдается для завершающей косой черты, и происходит 404.

Итак, я обновил действие:

<action type="Rewrite" url="/site2/{R:1}/" />

Кажется, это решило проблему, но почему IIS 7 теперь не выдает www.domain2.com/junk2/default.aspx/? Откуда он знает, что не следует добавлять косую черту к расширению документа?


person lyngbym    schedule 04.04.2009    source источник


Ответы (1)


www.domain2.com/junk не работает, потому что вы добавили косую черту в совпадение, но фактический URL-адрес для сопоставления не содержит его. Он просто содержит «мусор».

Также необходимо добавить:

<rule name="Domain2" stopProcessing="true">

поэтому он не оценивает другие правила, если совпадение найдено. Я подозреваю, что вы можете видеть, что вас смущают другие правила, которые вы установили.

person Tomas Kirda    schedule 25.04.2009