كيف تقوم بإعادة ربط الارتباطات التشعبية والمحتوى في صفحة ASP.NET؟
-
12-09-2019 - |
سؤال
لدي صفحة 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)
نصائح أخرى
عند تعيين صفحات خطأ 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.