Я писал этот вопрос, и в процессе он заставил меня немного подумать, и я сам ответил на него, хотя я до сих пор не совсем понимаю, почему он решил его.
У меня есть учетная запись на общем хосте с двумя зарегистрированными доменами. Я использую стек 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/? Откуда он знает, что не следует добавлять косую черту к расширению документа?