我已將 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=\"Web\" /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 無法傳遞檔案。
不管怎樣,現在已經修好了。感謝所有幫助診斷問題的人。