В настоящее время у нас есть два проекта ASP.NET MVC, обслуживаемых из Windows Server 2012 R2 с IIS 8.5 следующим образом:
foo
размещен на server.com/foo
bar
размещен на server.com/bar
Однако код этих проектов практически идентичен, поэтому мы находимся в процессе их объединения. В идеале у нас было бы
common
размещен на server.com/common
(который будет использоваться только внутри)^foo(.*)$
→ common{R:1}
так что появляется быть размещенным на server.com/foo
^bar(.*)$
→ common{R:1}
так что появляется быть размещенным на server.com/bar
Мы создали новый общий проект, и он отлично работает server.com/common
однако, когда мы включили правила перезаписи, все, что пытается перейти к server.com/foo
или /bar
выдаст ошибку 403, а именно:
Я почти уверен, что это не проблема с моими строками шаблона / замены, потому что если я изменю тип правила на Redirect
, он создает желаемый целевой URL.
Если я создам правило перезаписи IIS ^common/test(.*)$
→ common{R:1}
затем common
код работает правильно, но ^common-test(.*)$
→ common{R:1}
терпит неудачу, поэтому есть что-то предотвращение common
от обслуживания с любого URL Кроме как /common
.
Что сбивает с толку, так это то, что есть другое приложение, которое делает то же самое с /baz
и /qux
переписывается в общее приложение, /other
. Если я укажу ^foo(.*)$
→ other{R:1}
он работает нормально (хотя, конечно, выполняет неправильный код приложения). Я не могу определить какие-либо другие существенные различия между этими двумя приложениями, которые могли бы вызвать это. Фактически, я скопировал почти все Web.config
файл из other
и все еще видел такое же поведение.
Я также исчерпал эти другие возможные решения:
Что еще могло быть причиной этого? Буду признателен за любые указатели.
Покопавшись еще немного и снова посовещавшись с разработчиками, other
, Думаю, мы разобрались с этой проблемой.
В основном хостинг сайта server.com
и все приложения под ним, которые будут участвовать в перезаписи (common
, так же как foo
и bar
пока мы не будем готовы удалить их) должны выполняться в том же пуле приложений IIS.
Я скорректировал наш процесс развертывания с учетом этого. Мы используем Octopus, поэтому все сводилось к изменению одной переменной в каждом проекте. Для будущих читателей ваш процесс, вероятно, будет другим, но на всякий случай, надеюсь, это поможет кому-то другому: