2009-04-04 4 views
4

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

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

ответ

3

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

Кроме того, необходимо добавить:

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

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