IIS 7 無法提供 .aspx 頁面,但可以使用預設文件

IIS 7 無法提供 .aspx 頁面,但可以使用預設文件

我已將 ASP.NET 4 網站部署到 Windows Server 2008 上的 IIS 7 Default.aspx。但是,當我請求帶有擴展名的特定頁面時.aspx,我收到 404 錯誤。

例如,當我請求:

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 框架顯然已安裝並正在運行,因為我可以訪問預設頁面。順便說一句,我觀察到,當伺服器失敗並顯示 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.aspx,這是我透過在 URL 欄位中鍵入請求的頁面。這會導致 301(永久移動)錯誤。緊接著,同一頁面有一個沒有擴展名的條目.aspx,這會導致子狀態為 0 的 404 錯誤。 。

更新。我剛剛做了一個有趣的實驗。我在我的伺服器上創建了一個新的 Web 應用程序,有一個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 無法傳遞檔案。

不管怎樣,現在已經修好了。感謝所有幫助診斷問題的人。

相關內容