2011-02-21 19 views
17

मैं के रूप में एक साइट आईआईएस 7 पर की स्थापना पर अपने कस्टम 404 पृष्ठ एक .aspx पृष्ठ है मैं मूल URL जिस पर उपयोगकर्ताओं के क्रम कुछ करने के लिए उपयोग करने के लिए कोशिश कर रहा था को पुनः प्राप्त करने की जरूरत है मूल URL को एक्सेस करना 404 पेज पर प्रसंस्करण चाल यह है कि मुझे विशेष रूप से 404 को संभालने की आवश्यकता है जिसमें एक .aspx एक्सटेंशन (उदा। http://example.com/testurl) शामिल नहीं है, जो ASP.NET के कस्टम त्रुटियों अनुभाग के माध्यम से नहीं मिलता है। मैं आईआईएस को अपने कस्टम 404 पर इंगित करने के लिए कॉन्फ़िगर कर सकता हूं, लेकिन उस समय मुझे नहीं पता कि मेरा मूल यूआरएल कैसे प्राप्त करें? यदि संभव है तो किस प्रकार, क्या कोई जानता है?IIS7 404 रीडायरेक्ट पृष्ठ

धन्यवाद,

माइक

+1

क्या आपकी समस्या के साथ कोई भाग्य है? यदि आवश्यक हो तो मुझे अपने उत्तर को स्पष्ट करने में खुशी होगी। – rsbarro

उत्तर

24

हाँ, यह URL है, जो 404 त्रुटि का कारण बनता है पाने के लिए संभव है, तो आप सिर्फ यकीन है कि आप आईआईएस ठीक से विन्यस्त है बनाने की जरूरत है।

ऐसे दो मामले हैं जिन्हें आपको संभालने की आवश्यकता है, एक वह त्रुटि है जहां त्रुटि .aspx या .NET द्वारा प्रबंधित अन्य पृष्ठ से आती है, और दूसरा वह त्रुटि है जहां त्रुटि खराब फ़ोल्डर से होती है (जैसा कि आपके प्रश्न में है , http://example.com/testurl) या फ़ाइल नाम (उदाहरण के लिए, * .htm) जिसे .NET द्वारा नियंत्रित नहीं किया जाता है। आईआईएस 7 में, आपको अपने वेब ऐप के लिए "एएसपी.नेट" अनुभाग में ".NET त्रुटि पन्ने" के तहत एक कस्टम 404 त्रुटि और "आईआईएस" खंड में "त्रुटि पेज" के तहत भी कॉन्फ़िगर करना होगा। web.config परिवर्तन अंत कुछ इस तरह की तलाश में:

<system.web> 
    <!-- other system.web stuff --> 
    <customErrors defaultRedirect="/Error404.aspx" mode="On" redirectMode="ResponseRewrite"> 
     <error redirect="/Error404.aspx" statusCode="404" /> 
    </customErrors> 
</system.web> 
<system.webServer> 
    <!-- other system.webServer stuff --> 
    <httpErrors errorMode="Custom"> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" prefixLanguageFilePath="" path="/Error404.aspx" responseMode="ExecuteURL" /> 
    </httpErrors> 
</system.webServer> 

नोट: redirectMode = "ResponseRewrite" ऊपर सूचीबद्ध महत्वपूर्ण है अगर आप अपने 404 पृष्ठों वास्तव में 404 संदेशों वापस जाने के लिए चाहते हैं और मुझे नहीं लगता कि यह कर सकते हैं आईआईएस के माध्यम से सेट किया जाना चाहिए।

मेरे उदाहरण में, मैं एक पृष्ठ 404 त्रुटियों के सभी संभाल करने Error404.aspx बुलाया बनाया। जब एक .NET पृष्ठ (.aspx, आदि) 404 अपवाद फेंकता है, तो मूल फ़ाइल नाम aspxerrorpath querystring चर में पाया जा सकता है। जब एक नियमित एचटीएम या अन्य पृष्ठ 404 त्रुटि का कारण बनता है, तो मूल पथ Request.RawUrl प्रॉपर्टी से पढ़ा जा सकता है।

public partial class Error404 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     OriginalUrl = Request.QueryString["aspxerrorpath"] ?? Request.RawUrl; 
     Server.ClearError(); 
     Response.Status = "404 not found"; 
     Response.StatusCode = 404; 
    } 

    public string OriginalUrl { get; private set; } 
} 

डिफ़ॉल्ट रूप से, 404 त्रुटि पृष्ठ 404 स्थिति कोड वापस नहीं होगा, ताकि आप इसे मैन्युअल रूप से स्थापित करने की आवश्यकता: मैं या तो मामले को संभालने के लिए मेरी Error404.aspx पेज में निम्न कोड का इस्तेमाल किया। अधिक जानकारी के लिए this post देखें।

+1

धन्यवाद .. इस आलेख के साथ इसका एक संयोजन शामिल है http://www.agilewebtechnologies.com/blog/post/2007/11/18/Redirects-Using-404- त्रुटि- हैंडलिंग-in-ASPNET-20-on- साझा-होस्टिंग- (भाग -4) .aspx 301 रीडायरेक्ट में कनवर्ट करने के लिए। जोड़ा गया Response.AddHeader ("स्थान", OriginalUrl); Response.End(); नौकरी करने के लिए त्रुटि 404 में अपने कोड के अंत तक। – Dave

+1

आपके स्पष्ट और विस्तृत उत्तर के लिए धन्यवाद। मुझे माइक्रोसॉफ्ट वेबसाइट पर ऐसा कुछ नहीं मिला और 1 घंटे से अधिक बर्बाद हो गया। – dvdmn

संबंधित मुद्दे