404 Mengarahkan ulang untuk halaman non aspx

Saya menggunakan kode web.config di bawah ini untuk mengarahkan permintaan ke halaman yang hilang ke halaman penanganan kesalahan 404:

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

Ini berfungsi dengan baik ketika saya mencari halaman seperti "missing.aspx" tetapi tidak berfungsi untuk halaman tanpa ekstensi ".aspx" seperti "missing.asp" atau hanya "missing". Ketika tidak berhasil, itu hanya memuat halaman kesalahan standar IIS 7.5.

Apa yang saya lakukan salah? Saya menggunakan .net 4. Saya melihat orang lain menanyakan pertanyaan yang sama tetapi mereka tidak mendapatkan jawaban.

Terima kasih!


person Osprey    schedule 15.06.2012    source sumber
comment
coba hapus redirectMode="ResponseRewrite"   -  person Damith    schedule 15.06.2012
comment
Saya mencoba menggunakan informasi dalam pertanyaan ini tetapi tidak dapat menjalankannya. Maukah Anda berbaik hati melihat stackoverflow.com/questions/25798775/   -  person JGallardo    schedule 12.09.2014
comment
Ini berhasil bagi saya. Saya memiliki situs web Proyek stackoverflow.com/a/48661494/6665876   -  person Ankit Kashyap    schedule 03.06.2019


Jawaban (3)


Seperti yang dinyatakan oleh dbaseman, hal ini karena penangan asp.net tidak dipanggil untuk file non-asp.net. Cara mudah untuk memaksa pengendali asp.net beroperasi pada semua permintaan adalah dengan mengatur yang berikut ini di web.config Anda.

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

Hal ini memberitahu IIS untuk menjalankan semua modul yang dikelola untuk semua permintaan seperti .html, .jpg, .css, .js, dll. Hal ini biasanya tidak disukai karena hanya menimbulkan pemrosesan dan latensi tambahan.

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

Opsi lain untuk dicoba (lebih bersih dari yang di atas) telah diposting sebagai jawaban di sini: https://stackoverflow.com/a/6661699/701062

person Gary.S    schedule 15.06.2012
comment
Saya mencoba menggunakan apa yang Anda tulis tetapi tidak berhasil. maukah Anda melihat stackoverflow.com/questions/25798775/ - person JGallardo; 12.09.2014
comment
Aku sangat mencintaimu... Gary S. - person BossWalrus; 30.09.2014

Alasannya adalah ekstensi non-ASPX tidak pernah sampai ke pengendali ASP.NET; kesalahan yang Anda lihat berasal dari IIS. Ada bagian terpisah httpErrors di bawah system.webServer di web.config yang perlu Anda konfigurasi untuk menangani kesalahan ini. Lihat di sini untuk info lebih lanjut.

Contoh dari tautan:

<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
Saya menambahkan kode di bawah ini tetapi sekarang alih-alih menjalankan halaman penanganan kesalahan, ini menampilkan kode sumber halaman (ketika mencoba memuat halaman non aspx yang tidak ada). <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
Ini adalah jawaban yang lebih baik karena tidak bergantung pada pengiriman semua permintaan melalui pipa ASP.NET. @Osprey - ini karena errorMode disetel ke DetailedLocalOnly Pengaturan ini mengatakan, hei, jika permintaan datang dari mesin yang menghosting file, berikan beberapa info detail, jika tidak, tampilkan 500 halaman yang telah saya tetapkan. Ini berguna dalam skenario debugging. Anda dapat mengubah pengaturan ini ke Kustom dan pesan kesalahan ramah akan selalu ditampilkan. - person Tommy; 09.07.2014
comment
Ini tidak bekerja. Dan mengapa Anda menambahkan 505 padahal pertanyaannya khusus tentang kesalahan 404? - person JGallardo; 12.09.2014
comment
@JGallardo tidak berfungsi secara lokal, tetapi seharusnya berfungsi di server. Saya berasumsi Anda dapat menemukan/mengganti 404, atau apakah itu terlalu berlebihan bagi Anda? - person McGarnagle; 12.09.2014
comment
@McGarnagle Saya jelas menggantinya dengan 404. Lalu saya menambahkannya ke server jarak jauh tetapi masih tidak berhasil. - person JGallardo; 12.09.2014

Tambahkan yang berikut ini ke Web.config:

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

Saya mengambil kode Osprey, dan menambahkan responMode=Redirect untuk memperbaiki masalah hanya menampilkan kode sumber halaman.

person Matt G    schedule 15.03.2021