IIS 7은 .aspx 페이지를 제공하지 못하지만 기본 파일에서는 작동합니다.

IIS 7은 .aspx 페이지를 제공하지 못하지만 기본 파일에서는 작동합니다.

Windows Server 2008의 IIS 7에 ASP.NET 4 웹 사이트를 배포했습니다. 루트 폴더나 사이트의 다른 폴더를 탐색하면 서버는 Default.aspx예상한 대로 기본 페이지를 전달하여 응답합니다. 하지만 확장 기능이 포함된 특정 페이지를 요청하면 .aspx404 오류가 발생합니다.

예를 들어, 내가 요청할 때:

http://localhost/MyWeb/

서버가 성공적으로 전달합니다 http://localhost/MyWeb/Default.aspx. 그러나 명시적으로 요청하는 경우:

http://localhost/MyWeb/Default.aspx

그러면 IIS는 404 오류로 응답합니다.

오류 내용은 다음과 같습니다.

Module: IIS Web Core
Notification: MapRequestHandler
Handler: StaticFile
Error code: 0x80070002

기본 페이지에 액세스할 수 있으므로 .NET Framework가 설치되어 작동하고 있는 것입니다. 그런데 서버에 오류가 발생하고 404 오류 페이지가 표시되면 내가 입력한 URL(예: http://localhost/MyWeb/Default.aspx)이 확장 프로그램을 삭제하고 읽는다는 사실을 관찰했습니다 http://localhost/MyWeb/Default.

서버를 실행하고 다시 시작해 보았 aspnet_iisreg -i으나 상황이 바뀌지 않았습니다.

내가 무엇을 놓치고 있나요? 감사합니다.

업데이트. 여기에 web.config내 사이트를 게시하고 있습니다 . 여기에 적용되는 다른 구성 파일은 없습니다.

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>

  <appSettings>
    <add key="DatabaseServer" value="CONWAY\SQLEXPRESS"/>
    <add key="DatabaseName" value="KaleidoScape"/>
    <add key="User" value="KaleidoScapeUser"/>
    <add key="Password" value="Scape1!"/>
  </appSettings>

  <system.web>

    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" />

    <pages>
      <namespaces>
        <add namespace="System.Web.Optimization" />
      </namespaces>
      <controls>
        <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" />
        <add tagPrefix="uc" tagName="FileGallery" src="~/Controls/FileGallery/FileGallery.ascx" />
      </controls>
    </pages>

    <authentication mode="Forms">
      <forms defaultUrl="~/App" loginUrl="~/Default.aspx" slidingExpiration="true" timeout="120" name="Incipit.KaleidoScape" />
    </authentication>

    <authorization>
      <allow users="*" />
    </authorization>

  </system.web>

  <location path="App">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" culture="neutral" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>      
    </assemblyBinding>
  </runtime>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</configuration>

업데이트. 실패한 요청에 대한 IIS 로그 항목은 다음과 같습니다.

2016-10-23 21:13:22 127.0.0.1 GET /MyWeb/MyPage.aspx - 80 - 127.0.0.1 Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.0;+WOW64;+Trident/5.0) 301 0 0 46
2016-10-23 21:13:22 127.0.0.1 GET /MyWeb/MyPage - 80 - 127.0.0.1 Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.0;+WOW64;+Trident/5.0) 404 0 2 0

두 개의 항목이 있다는 점에 유의하세요. 첫 번째는 MyPage.aspxURL 필드에 입력하여 요청한 페이지인 에 해당합니다. 이로 인해 301(영구적으로 이동됨) 오류가 발생합니다. 바로 뒤에 확장명이 없는 동일한 페이지에 대한 항목이 있어 .aspx하위 상태 0의 404 오류가 발생합니다. 전체 URL이 301을 얻는 이유와 서버가 전달을 시도하는 이유(그리고 실패하는 이유)를 이해할 수 없습니다. 확장자가 없는 페이지.

업데이트. 방금 흥미로운 실험을 진행했습니다. 내 서버에 단일 Test.aspx파일이 있는 새 웹 애플리케이션을 만들었습니다. 예상대로 작동했습니다. 즉, 명시적으로 요청하면 서버가 페이지를 전달합니다. 그러다가 골치 아픈 웹사이트의 모든 내용을 복사하고 Test.aspx작동을 멈췄습니다! 그런 다음 이 웹에서 파일을 제외한 모든 항목을 삭제했는데 Test.aspx다시 작동하지 않고 계속 실패했습니다. 결론적으로, 웹 콘텐츠에는 문제를 일으키고 콘텐츠를 삭제한 후에도 지속되는 무언가가 있습니다. 이것은 Visual Studio 2015에서 Bootstrap과 함께 제공되는 프로젝트 템플릿과 기타 몇 가지 기능을 사용하여 만든 웹 사이트입니다. 나는 완전히 혼란스러워요.

답변1

많은 연구 끝에 이에 대한 해결책을 찾았습니다. 문제를 해결하는 방법을 알고 있지만 왜 문제가 발생하는지 여전히 잘 모르겠습니다.

이 문제는 IIS 7에서 사용할 수 있는 "친숙한 URL" 메커니즘과 관련이 있습니다. App_Start\RouteConfig.cs다음에서 코드를 변경하여 비활성화했습니다.

var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);

에게:

var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Off;
routes.EnableFriendlyUrls(settings);

이로 인해 문제가 해결되었습니다. 내가 이해하는 한, 친숙한 URL은 파일 확장자를 삭제하는 것에 관한 것이므로 페이지를 요청할 때마다 301 오류와 확장자가 없는 파일에 대한 후속 시도가 발생하는 것 같습니다. 그러나 IIS가 파일을 전달하지 못하는 이유를 모르겠습니다.

어쨌든 이제 해결되었습니다. 문제 진단에 도움을 주신 모든 분들께 감사드립니다.

관련 정보