404 การเปลี่ยนเส้นทางสำหรับหน้าที่ไม่ใช่ aspx

ฉันใช้โค้ด web.config ด้านล่างเพื่อเปลี่ยนเส้นทางคำขอไปยังหน้าที่หายไปไปยังหน้าการจัดการข้อผิดพลาด 404:

<customErrors mode="On" defaultRedirect="404.aspx" redirectMode="ResponseRewrite">
  <error statusCode="404" redirect="404.aspx"/>
</customErrors>

มันใช้งานได้ดีเมื่อฉันค้นหาหน้าต่างๆ เช่น "missing.aspx" แต่ใช้ไม่ได้กับหน้าที่ไม่มีนามสกุล ".aspx" เช่น "missing.asp" หรือแค่ "missing" เมื่อไม่ได้ผล ระบบจะโหลดหน้าข้อผิดพลาด IIS 7.5 มาตรฐาน

ผมทำอะไรผิดหรือเปล่า? ฉันใช้ .net 4 ฉันสังเกตเห็นว่ามีคนอื่นถามคำถามเดียวกัน แต่พวกเขาไม่ได้รับคำตอบ

ขอบคุณ!


person Osprey    schedule 15.06.2012    source แหล่งที่มา
comment
ลองลบ redirectMode="ResponseRewrite"   -  person Damith    schedule 15.06.2012
comment
ฉันลองใช้ข้อมูลในคำถามนี้แต่ไม่สามารถทำได้ คุณจะกรุณาดูที่ stackoverflow.com/questions/25798775/   -  person JGallardo    schedule 12.09.2014
comment
สิ่งนี้ได้ผลสำหรับฉัน ฉันมีเว็บไซต์โครงการ stackoverflow.com/a/48661494/6665876   -  person Ankit Kashyap    schedule 03.06.2019


คำตอบ (3)


ตามที่ dbaseman ระบุว่าเป็นเพราะตัวจัดการ asp.net ไม่ได้ถูกเรียกสำหรับไฟล์ที่ไม่ใช่ asp.net วิธีง่ายๆ ในการบังคับให้ตัวจัดการ asp.net ดำเนินการกับคำขอทั้งหมดคือการตั้งค่าต่อไปนี้ใน web.config ของคุณ

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
</system.webServer>

ซึ่งจะเป็นการบอกให้ IIS ทำงานผ่านโมดูลที่ได้รับการจัดการทั้งหมดสำหรับคำขอทั้งหมด เช่น .html, .jpg, .css, .js เป็นต้น ซึ่งโดยทั่วไปแล้วมักจะไม่ค่อยถูกมองว่าเป็นเพราะเป็นเพียงการแนะนำการประมวลผลและเวลาแฝงเพิ่มเติม

http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx

ตัวเลือกอื่นที่ควรลอง (สะอาดกว่าด้านบน) ถูกโพสต์เป็นคำตอบที่นี่: https://stackoverflow.com/a/6661699/701062

person Gary.S    schedule 15.06.2012
comment
ฉันลองใช้สิ่งที่คุณเขียนแต่ไม่สามารถใช้งานได้ คุณช่วยดูที่ stackoverflow.com/questions/25798775/ - person JGallardo; 12.09.2014
comment
ฉันรักคุณ...มาก Gary S. - person BossWalrus; 30.09.2014

เหตุผลก็คือส่วนขยายที่ไม่ใช่ ASPX ไม่เคยสร้างให้กับตัวจัดการ ASP.NET ข้อผิดพลาดที่คุณเห็นนั้นมาจาก IIS มีส่วน httpErrors แยกต่างหากภายใต้ system.webServer ใน web.config ที่คุณจะต้องกำหนดค่าเพื่อจัดการกับข้อผิดพลาดเหล่านี้ ดูข้อมูลเพิ่มเติมที่นี่

ตัวอย่างจากลิงก์:

<configuration>
   <system.webServer>
      <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" >
         <remove statusCode="500" />
         <error statusCode="500"
            prefixLanguageFilePath="C:\Contoso\Content\errors"
            path="500.htm" />
       </httpErrors>
   </system.webServer>
</configuration>
person McGarnagle    schedule 15.06.2012
comment
ฉันเพิ่มโค้ดด้านล่าง แต่ตอนนี้แทนที่จะเรียกใช้หน้าการจัดการข้อผิดพลาด มันแสดงซอร์สโค้ดของหน้า (เมื่อพยายามโหลดหน้าที่ไม่มีอยู่ที่ไม่ใช่ aspx) <system.webServer> <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" > <remove statusCode="404" /> <error statusCode="404" path="404.aspx" /> </httpErrors> </system.webServer> - person Osprey; 15.06.2012
comment
นี่เป็นคำตอบที่ดีกว่าเนื่องจากไม่ต้องอาศัยการส่งคำขอทั้งหมดผ่านไปป์ไลน์ ASP.NET @Osprey - นี่เป็นเพราะ errorMode ถูกตั้งค่าเป็น DetailedLocalOnly การตั้งค่านี้บอกว่า เฮ้ หากคำขอมาจากเครื่องที่โฮสต์ไฟล์ ให้ให้ข้อมูลโดยละเอียด ไม่เช่นนั้น ให้แสดง 500 เพจที่ฉันกำหนดไว้ สิ่งนี้มีประโยชน์ในสถานการณ์การตรวจแก้จุดบกพร่อง คุณสามารถเปลี่ยนการตั้งค่านี้เป็นกำหนดเองได้ และจะแสดงข้อความแสดงข้อผิดพลาดที่เป็นมิตรเสมอ - person Tommy; 09.07.2014
comment
สิ่งนี้ไม่ทำงาน และทำไมคุณถึงเพิ่ม 505 ในเมื่อคำถามเกี่ยวกับข้อผิดพลาด 404 โดยเฉพาะ - person JGallardo; 12.09.2014
comment
@JGallardo ไม่ทำงานในพื้นที่ แต่ควรทำงานบนเซิร์ฟเวอร์ ฉันคิดว่าคุณสามารถค้นหา / แทนที่ 404 ได้หรือมันมากเกินไปสำหรับคุณ? - person McGarnagle; 12.09.2014
comment
@McGarnagle เห็นได้ชัดว่าฉันแทนที่ด้วย 404 จากนั้นฉันก็เพิ่มมันลงในเซิร์ฟเวอร์ระยะไกล แต่ก็ยังใช้งานไม่ได้ - person JGallardo; 12.09.2014

เพิ่มสิ่งต่อไปนี้ใน Web.config:

<system.webServer>    
    <httpErrors errorMode="Custom" defaultResponseMode="ExecuteURL" >
      <remove statusCode="404" />
      <error statusCode="404" path="/Default.aspx" responseMode="Redirect" />
    </httpErrors>
  </system.webServer>

ฉันใช้โค้ดของ Osprey และเพิ่ม responseMode=Redirect เพื่อแก้ไขปัญหาในการแสดงซอร์สโค้ดของเพจ

person Matt G    schedule 15.03.2021