لقد رأيت على الإنترنت أن العديد من الأصدقاء يقومون بإعادة كتابة عنوان url في asp.net ويستخدمون طريقة HttpHandle+Server.Transfer. في الواقع، هذا الأسلوب خاطئ. أولاً، لا يمكن لـ HttpHandle تنفيذ urlrewrite؛ وثانيًا، Server.Transfer هو إعادة توجيه قياسية، وليس إعادة كتابة url على الإطلاق.
في الواقع، لا تحتاج إلى تنفيذ HttpHandle أو HttpModule الخاص بك لتنفيذ urlrewrite، ويمكن تنفيذه بسهولة باستخدام بضعة أسطر من التعليمات البرمجية.
ما أعرضه هنا هو على مضيف افتراضي، يختلف المضيف الظاهري عن الخادم الخاص بك، وليس لديك الإذن بتعديل iis، كما ليس لديك الإذن بتثبيت المكونات الإضافية لـ iis مثل إعادة كتابة iis. ولكن لا يزال بإمكاننا إكمال الوظائف المطلوبة بسهولة.
الطريقة المحددة هي كما يلي: افتح global.asax.cs وحدد موقع Application_BeginRequest (Object sender, EventArgs e) الفارغ المحمي. من اسم الطريقة، أعتقد أنني أستطيع تخمين ما تفعله. أدخل الكود التالي:
Application_BeginRequest (Object sender, EventArgs e) محمي باطل
{
string oldUrl = HttpContext.Current.Request.RawUrl
نمط السلسلة = @"^(.+)default/(d+).aspx(?.*)*$";
سلسلة استبدال = "$1default.aspx?id=$2";
if(Regex.IsMatch(oldUrl, Pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
سلسلة newUrl = Regex.Replace(oldUrl, نمط, استبدال, RegexOptions.Compiled | RegexOptions.IgnoreCase);
this.Context.RewritePath(newUrl);
}
}
باستخدام الكود أعلاه، يمكنني الوصول إلى عنوان URL مشابه لـ: .../default/123.aspx. بالطبع، عنوان URL هذا غير موجود على جهاز الكمبيوتر الخاص بي، لذا سيتم توجيهه إلى: .../default.aspx? =123.
بالطبع، باستخدام التعبيرات العادية القوية، يمكنك إعادة كتابة عنوان URL وفقًا لاحتياجاتك الخاصة، كل هذا يتم بصمت على جانب الخادم، ولن يكون العميل على علم بذلك. نظرًا لوجوده على مضيف افتراضي، يمكننا فقط إعادة توجيه الملف .aspx إذا كان خادمًا خاصًا بنا، فيمكننا معالجة أي لاحقة بمجرد تسجيل اللاحقة في iis. على سبيل المثال، يمكنك تسجيل نوع مثل *.myweb، بحيث عندما يقوم الآخرون بزيارة default/456.myweb، يمكنك إعادة توجيهه إلى default.aspx?id=456. باختصار، طالما يمكنك التفكير في الأمر، يمكن أن يساعدك .net على إدراكه، وكل هذا لا يتطلب الكثير من التعليمات البرمجية.