IIS 7 перезаписи URL и два домена - PullRequest
4 голосов
/ 04 апреля 2009

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

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

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

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

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

1 Ответ

3 голосов
/ 25 апреля 2009

www.domain2.com / junk не работает, потому что вы добавили слеш в совпадении, но фактический URL для совпадения не содержит. Это просто содержит "мусор".

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

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

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

...