كيف تقوم بإعادة ربط الارتباطات التشعبية والمحتوى في صفحة ASP.NET؟

StackOverflow https://stackoverflow.com/questions/965133

سؤال

لدي صفحة ASP.NET للتعامل مع "404 صفحة غير موجودة" هي الإعداد عن طريق تكوين <customErrors> قسم في ملف Web.config الخاص بي وإعداد صفحة الخطأ المخصصة لأخطاء 404 في إدارة IIS.

إنه يعمل كما هو متوقع بالنسبة للصفحات في جذر موقع الويب الخاص بي ولكنه لا يعمل في دليل فرعي للموقع - فإن الارتباطات التشعبية والمحتوى في صفحة الخطأ المخصصة لديك قاعدة عنوان URL خاطئ.

جميع الروابط في صفحتي الخطأ هي عناصر تحكم جانبية الخادم (RunAT = "Server") ولها روابطها المستندة مع "~ /".

عندما تصفح الموقع مع http://mysite/nosuchfolder/nosuchfile تقدم الصفحة مع روابط تفكير بأنها يتم تقديمها من الجذر، بدلا من nosuchfolder وكما يتم كسر جميع الروابط في المتصفح حيث أن المتصفح هو بناء الروابط من nosuchfolder.

هل هناك أي طريقة ل "معرفة" صفحة ASP.NET لإعادة الروابط في مجلد / اسم ملف آخر؟

ملاحظات:

  • يتم تقديم غالبية قالب الصفحة من صفحة رئيسية
  • أنا أركيز IIS6 وقم بتعيين خطأ مخصص 404 إلى URL: /error404.aspx
  • في ملف Web.config الخاص بي قمت بتكوين <customErrors> قسم لإعادة توجيه إلى /error404.aspx
  • كحلارة، أنا أستخدم HTML <base> علامة في الصفحة، ولكن أريد تجنب هذا
  • لا أريد أن أتعرض لتغيير جميع الروابط القائمة على "~ /" الخاص بي إلى "/" أو اختراق في الخط
هل كانت مفيدة؟

المحلول 2

وضعت مقالة Scott Gu عن إعادة كتابة عنوان URL على الطريق الصحيح (حتى التحدث!) - شكرا ل Tip James.

الجواب هو استخدام Context.RewritePath(newPath)

هنا هو الرمز الذي أستخدمه في صفحة مخصصة 404 -

protected override void Render(HtmlTextWriter writer)
{
    string rebase = Server.UrlDecode(Request.ServerVariables["QUERY_STRING"]);

    if (rebase.Length>10 && rebase.StartsWith("404;"))
    {
        try
        {
            rebase = new Uri(rebase.Substring(4)).AbsolutePath;
        }
        catch
        {
            rebase = "/";
        }
        finally
        {
            Context.RewritePath(rebase);
        }
    }

    base.Render(writer);
    Response.StatusCode = 404;
}

للتعامل مع صفحات .aspx المفقودة بنفس الطريقة، هناك إعداد في web.config مسمى redirectMode التي قمت بتعيينها ResponseRewrite

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

هذا يتوقف عن السلوك الافتراضي لإعادة توجيه المستخدم إلى ~/error404.aspx?aspxerrorpath=badfile

ملاحظة: هذا الإعداد جديد على أحدث حزم خدمة ASP.NET (مثل Framework 3.5 SP1)

MSDN مرجع ل RedirectMode

نصائح أخرى

عند تعيين صفحات خطأ UO Yoru Custome، هل تستخدم إعادة توجيه أو إعادة كتابة URL؟ المشكلة التي تصفها هي مشكلة شائعة عند تنفيذ إعادة كتابة عنوان URL في ASP.NET. في الأساس، في إعادة كتابة عنوان URL يصبح غير واضح مع المعالج الذي يستخدمه عنوان URL عند تحليل عناوين URL. رقم إذا تم كتابة المقالات / المشاركات حول كيفية معالجة المشكلة.

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx.

http://searchengineland.com/url-rewriting-custom-error-pages-in-aspnet-20-12234.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top