2017-12-11 9 views
3

응용 프로그램의 IIS 사이트에 있어야하는 반응 SPA를 사용하여 확장/교체중인 IIS에서 호스팅되는 기존 ASP.Net MVC가 있습니다.하위 응용 프로그램에 대한 IIS URL 리디렉션 SPA

비즈니스 목적으로 입주자가 될 수없고 기존 시스템이 웹 양식이고 여러 가지 클라이언트에 대해 여러 가지 배포 된 인스턴스가 있기 때문에이 작업이 완료되었습니다. 기존 시스템은 웹 양식이며 SPA를 프로젝트에서 하위 응용 프로그램이 새로운 기능을 배포하는 가장 쉬운 방법이 될 것이라는 결론을 얻었습니다. 다른 MVC 프로젝트를 원하지 않았거나 합법적 인 다른 클라이언트 관련 사용자 정의로 인해 WebApi 프로젝트를 정적 페이지로 제공하지 않았습니다.

SPA는 자체 WebApi 백엔드와 통신하며이 응용 프로그램 자체는 반응 응용 프로그램 아래에있는 응용 프로그램입니다.

은 다음과 같습니다 visulise 돕기 위해 :

IIS Manager snip

지금이 모든 작품은 SPA는 단순히 정상 HREF과 WebApi 백엔드에 행복하게 SPA 회담에서 부모 응용 프로그램에서로드 할 수 있습니다.

내가 벽돌 벽에 부딪혔을 때 IIS URL 다시 쓰기 규칙을 정렬하여 IIS가 SPA index.html을 반환하고 클라이언트 측 라우팅 (라우터 라우터 v4 반응)을 반환하는 SPA에서 F5를 누르는 경우 올바른 구성 요소 렌더링을 처리합니다.

url 다시 쓰기 규칙은 v5 응용 프로그램에 정의되어 있습니다.

나는 this onethis one과 같은 질문에 대한 조언을 따라 왔으며 반응하는 SPA가 사이트 루트에 있다면 완벽하게 작동하지만 하위 응용 프로그램으로 이동하자마자 404 응답이 수신됩니다. 그 전체 URL을 찾을 수 없습니다 예 : URL을 요청할 때 localhost/v5/documents IIS는 존재하지 않는 v5/documents 파일/디렉터리를 찾으려고 시도합니다.

기존 시스템을 방정식에서 제거하려면 최상위 사이트에 내용이없고 반응 사이트가 v5 응용 프로그램에 있고 webapi가 api 폴더에있는 새 폴더에 사이트를 배포해야합니다. 모든 일.

일치하는 패턴을 여러 번 사용해 보았습니다. 현재 사용하고있는 패턴은 .*/v5/?.*입니다. IIS 관리자의 테스트 패턴 기능에서 URL이 예기치 않게 일치한다고 알려줍니다. localhost/v5/documents의 URL은 일치해야하지만 실제로는 그렇지 않습니다.

나는 this link about configuring angularthis 릭 스트라엘 (Rick Strahl)이 규칙을 만들었지 만 행운이없는 게시물을 발견했습니다.

내가 지금 사용하고 전체 구성은

<rewrite> 
    <rules> 
    <rule name="Rewrite Text Requests" enabled="true" stopProcessing="true"> 
     <match url=".*/v5/?.*" /> 
     <conditions logicalGrouping="MatchAll"> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
       <add input="{REQUEST_URI}" pattern="/api(.*)$" negate="true" /> 
       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="{HTTP_HOST}/v5/index.html" logRewrittenUrl="false" /> 
    </rule> 
    </rules> 
</rewrite> 

입니다 I했습니다도 설치 실패한 요청 추적하지만 로그를 볼 때 나는 URL이 요청에 대한 해고 다시 표시되지 않습니다 이것이 존재하지 않는 파일/디렉토리를 찾는 이유입니다.

내가 만들-반응 - 응용 프로그램 (I 프로덕션이 webpackdevserver하지 구축하여 테스트하고 있습니다로 만든 사이트를 반응, 실패한 요청 추적 로그 here

나는 윈도우 10에서 IIS 10.0.15063.0을 사용하고 있습니다를 업로드 한)이며 WebApi 프로젝트는 .Net Framework 4입니다.7

+1

모듈의 순서를 확인 했습니까? URL을 다시 쓰기 전에 정적 파일을 실행합니까? – dez

+0

모듈이 올바른 순서로되어 있고 다시 쓰기 규칙이있는 위치와 일치하는 패턴과 일치했습니다. – Nathan

답변

0

내가 생각할 수있는 가장 간단한 방법으로 시나리오를 재현했습니다.

두 응용 프로그램/v5 및/v5/api로 MySite라는 웹 사이트를 만들었습니다.

나는하여 V5 응용 프로그램의 Web.config에 다음을 넣어, 그래서 Web.config의는 V5

<rewrite> 
    <rules> 
     <rule name="Rewrite Text Requests" enabled="true" stopProcessing="true"> 
     <match url=".*" /> 
     <conditions logicalGrouping="MatchAll"> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
        <add input="{REQUEST_URI}" pattern="^/v5/api(.*)$" negate="true" /> 
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="/v5/index.html" logRewrittenUrl="false" /> 
     </rule> 
    </rules> 
</rewrite> 

규칙에 대한 URL이 V5 응용 프로그램에서 모든 일치의 루트 디렉토리에 있었다. 이 조건은 대상이 파일, 디렉토리 또는 api 응용 프로그램의 모든 항목이면 취소하는 데 사용됩니다.

호스트 이름은 다시 쓰기 작업에 필요하지 않습니다.

+0

빈 부모 응용 프로그램과 완벽하게 작동하지만 루트의 실제 상위 응용 프로그램과 함께 실행하면 완벽하게 작동합니다. webforms 앱의 모든 요청 (웹 양식 앱)은 304를 반환하고 index.html이 제공됩니다. 불행히도 현재로서는 부모 앱을 계속 사용해야합니다. – Nathan

+0

상위 응용 프로그램 (웹 양식 응용 프로그램) 또는 v5 응용 프로그램의 web.config에 설정을 적용 하시겠습니까? 부모 응용 프로그램의 웹 구성이 실제로는 부모 응용 프로그램의 웹 구성보다 더 이상 작동하지 않는다면 기대할 수 있습니다. 그러나 v5 응용 프로그램의 web.config에 있으면 상위 응용 프로그램이 어떤 식 으로든 영향을받지 않아야합니다. –

+0

나는 어찌 되었든 V5에서 시험해 보았고 작동하지 않았다. 따라서 루트에서 설명한대로 결과를 시도했다. 다시 지금으로 돌아가서 모든 것을 두 번 확인했는데 반응 사이트에서 완벽하게 작동하여 webforms 사이트에 대한 몇 가지 추가 조정이 필요했습니다. – Nathan