بلاگ تخصصی دات نت نیوک ایران

وبلاگ تخصصی دات نت نیوک فارسی

بلاگ تخصصی دات نت نیوک ایران

وبلاگ تخصصی دات نت نیوک فارسی

این بلاگ با هدف رشد و فراگیر شدن دات نت نیوک در بین فارسی زبانان و مرجع کاملی برای شروع دات نت نیوک ، یادگیری، دانلود ماژول و اسکین، ماژول نویسی و فارسی سازی و اخبار روزانه آن خواهد بود

نویسندگان

خطای 404 در دات نت نیوک

چهارشنبه, ۵ اسفند ۱۳۹۴، ۰۵:۰۸ ب.ظ

رسیدگی به خطای 404 یعنی مدیریت آنچیزی که مخاطب سایت شما هنگامی می بیند که بر روی لینک خرابی کلیک میکند یا URL نامعتبری را وارد می کند.
اینکه سایتی بتواند خطاهای موجود در سایت را اداره کند و به کاربر صفحه های اغلب گیج کننده (برای کاربر) خطاها را نشان ندهد و آن ها را به صفحه هایی که از قبل برای این لحظات تدارک دیده است هدایت کند نشان دهنده این است که این سایت، یک سایت حرفه ای است.
تصور کنید که مخاطب بر روی لینکی از سایت شما کلیک می کند که این لینک به دلایلی خراب است، این خرابی می تواند دلایل گوناگونی داشته باشد. مثلا ممکن است این لینک به پستی از بلاگ شما باشد که شما آن را پاک کرده اید و یا اینکه در آدرس این لینک اشتباه تایپی رخ داده باشد. در این هنگام کاربر با صفحه ای مانند شکل زیر رو به رو می شود: تقریبا همه ی مخاطبان وقتی با اینچنین صفحه ای رو به رو می شوند، این پیج را می بندند و از سایت ما خارج می شوند، حال اگر ما جای این صفحه ی گیج کننده برای کاربر صفحه ای با پوسته ی سایت خودمان نمایش دهیم که در آن به کاربر صفحه های مشابه را پیشنهاد کند و یا اینکه نقشه ی سایت را در آن نمایش دهیم تا کاربر بتواند بر اساس آن به بخش مورد نظرش هدایت شود، می توانیم کاربر را در سایت خود حفظ کنیم و شانس دیده شدن قسمت های مختلف سایت را خواهیم داشت. در عین حال سایت ما یک سایت واکس خورده و تمیز به نظر خواهد آمد.

پیش زمینه ای بر چگونگی اداره شدن URL ها در دات نت نیوک

برای آنکه به مشکلات و چگونگی اداره کردن صفحات 404 در دات نت نیوک پی ببریم، بهتر است که قبل از آن نگاهی بیندازیم به دات نت نیوک که چگونه URL ها را اداره می کند. حتما می دانید که دات نت نیوک بر پایه ی پلتفورم ASP.NET سوار شده است، که بر روی IIS در سیستم عامل ویندوز اجرا می شود.
شکل زیر نشان می دهد که هنگامی که یک درخواست URL به دات نت نیوک می رسد چه اتفاقی می افتد. در زیر این گام ها را توضیح می دهیم:

1. درخواست از طرف مرورگر به وبسایت می رسد.
2. IIS آدرس درخواست شده را بررسی می کند و آن را بر اساس پیکر بندی کنونی خود به مرحله ی بعدی میفرستد. فایل های استاتیک مثل .jpg, .css, .gif و غیره را مستقیما از فایل سیستم می خواند و آنها را به صورت پاسخ باز می گرداند. اما فایل های ASP.NET مانند .aspx, .axd, .asmx و غیره را به زمان اجرای ASP.NET می فرستد.
3. درخواست های ASP.NET ای به URL Rewriter پیکربندی شده در دات نت نیوک فرستاده می شود. در داخل URL Rewriter می تواند یکی از اتفاق های زیر بیفتد:
a) اگر آدرس درخواست شده با صفحه ای در سایت ما مطابقت داشت آنگاه URL دریافت شده از فرمی به شکل rastanuke.ir/aboutus.aspx به فرمی مانند rastanuke.ir/default.aspx?tabid=xx دوباره نویسی می شود. جای xx یک عدد قرار می گیرد. این کار برای آن است که default.aspx تنها فایل فیزیکی موجود بر روی دایرکتوری وبسایت شما است و تمام صفحات دات نت نیوک بر روی آن لود می شوند و دات نت نیوک از روی پارامتر tabid می فهمد که چه صفحه ای باید بر روی default.aspx بارگذاری شود.
b) اگر آدرس درخواست شده با هیچ صفحه ای از سایت ما مطابقت نداشت آنگاه URL بازنویسی نمی شود و URL Rewriter همان گونه آدرس را باز می گرداند.
حال ASP.NET تلاش می کند که فایل ها یا هندلر ها(اگر در web.config تعریف شده باشند)ی درخواست شده را پیدا کرده و آنها را اجرا کند. این پروسه برای URL های بازنویسی شده و غیر بازنویسی شده یکسان است.
4. اگر ASP.NET فایل یا هندلر خواسته شده را پیدا کند آنگاه بر اساس پیکربندی داده شده صفحه ی 404 را نشان می دهد. اگر ما تغییری در پیکربندی سایت برای خطای 404 نداده باشیم آنگاه به صورت پیش فرض همان خطای شکل 1 نشان داده خواهد شد:

اما اگر ما در پیکر بندی سایت برای خطای 404 تغییراتی داده باشیم آنگاه ASP.NET با کد وضعیت HTTP 302 به URL داده شده تغییر مسیر می دهد و صفحه ی 404 مورد نظر ما با کد وضعیت 200 OK بارگذاری می شود.
5. حال اگر ASP.NET فایل یا هندلر ما را پیدا کند آنگاه کد آن را اجرا کرده و محتویات را با کد وضعیت 200 OK بازگشت می دهد.
6. برای فایل های استاتیک که IIS آنها را اداره می کند، اگر IIS نتواند فایل خواسته شده را پیدا کند، آنگاه به سراغ پیکر بندی IIS می رود و بر اساس آن اگر هندلر سفارشی شده خطای 404 را در آن پیدا کند آنگاه آن صفحه نمایش داده می شود، در غیر این صورت صفحه ی خطای 404 استاندارد خود را نمایش می دهد که نمونه ی آن در زیر می آید:

البته این صفحه بر اساس نسخه ی IIS و یا تنظیمات این که جزئیات خطا را نشان دهد یا ندهد می تواند متفاوت باشد.
همان طور که مشاهده کردید اینکه درخواست داده شده به یک فایل .NET باشد یا یک فایل استاتیک و یا یک فولدر، ممکن است خطای 404 آن توسط IIS تولید شود یا خود ASP.NET. پس برای اینکه صفحه ی خطای 404 سفارشی خود را داشته باشیم باید هر دوی این صفحات را به صفحه ی سفارشی خود ارجاع دهیم.

صفحه خطای 404 ایده آل برای دات نت نیوک

اگر در سایت شما خطای 404 پیش آمد چه اتفاقی باید بیفتد؟
1. صفحه ی 404 شما باید طوری باشد که کاربر بفهمد این جزوی از سایت شماست.
شما در این صفحه باید با فونت درشت مشخص کنید که این صفحه ایست برای خطای 404، می توانید این کار را به طور رسمی با کلماتی نظیر "خطای 404 در آدرس فلان" نشان دهید یا اینکه آن را غیر رسمی کنید:"اوه، ما فکر می کنیم سندی که شما به دنبالش هستید گم شده!". اون چیزی که مهم است این است که این صفحه شما نشانه هایی از سایت شما را داشته باشد. مثلا رنگ بندی، فونت و لوگو.
2. صفحه 404 شما باید شامل لینک هایی به حداقل صفحه های اصلی سایتتان باشد تا کاربر را هدایت کند. بهتر از آن اینست که بر اساس لینک ناموجودی که کاربر آن را وارد کرده یا بر روی آن کلیک کرده، بر روی سرور جست و جو انجام شود و نتایج جست و جو را در آن صفحه نشان دهیم. اینکه فقط در صفحه به کاربر پیغام دهیم که "یک گام به عقب برگرد و دوباره تلاش کن" یا "آدرس را دوباره چک کن" چندان کمکی به کاربر نمی کند و شانس دیده شدن سایت شما را هم به مراتب کمتر می کند.
3. اگر صفحه ی خطای 404 را خودتان نسازید آنگاه نمی توانید از ابزار های تحلیل سایت استفاده کنید، ایزازهایی مانند گوگل آنالیتیک یک قطعه کد جاوا اسکریپت هستند که باید در صفحه لود شوند. بهتر است که ابزارهایی از این دست رو در صفحه ی 404 خودتان هم قرار دهید. وقتی تعداد بازدید این صفحه ها زیاد شد یعنی یک جای کار می لنگد.
4. صفحه ی خطای 404 شما باید کد وضعیت 404 را به موتور جست و جو بازگرداند.
کد وضعیت HTTP برای مرورگرها و روبوت های فهرستگر موتورهای جست و جو است تا وضعیت صفحه و فایل ها را بفهمند و بر اساس آن عمل کنند. اگر صفحه ی شما کد وضعیت 404 را برنگرداند، موتور جست و جو نمی فهمد که اینچنین صفحه ای وجود خارجی ندارد. این که این صفحات کد وضعیت 404 را بازگردانند یک نکته ی مهم است چرا که باعث می شود که صفحات حذف شده و لینک های شکسته از فهرست موتور جست و جو حذف شوند.

صفحه های خطای 404 دات نت نیوک به صورت پیش فرض چه مشکلاتی دارند؟

با توجه به نکات گفته شده در بالا، می توان فهمید که نسخه ی استاندارد برای نصب دات نت نیوک مشکلات زیر را دارد:
1. صفحه ی استانداردی برای خطای 404 دات نت نیوک وجود ندارد. بسته به این که خطا در کجا اتفاق افتاده باشد، دات نت نیوک ممکن است که صفحه ی 404 ASP.NET و یا صفحه ی 404 IIS را نمایش دهد.
شما می توانید صفحه 404 خود را بسازید و کاری کنید که تمام خطاهای 404 به آنجا فرستاده شوند. این کاری است که خود سایت www.dotnetnuke.com انجام می دهد. مشکل این روش این است که هنگامی که شما چند پورتال در یک اینستال دات نت نیوک خود دارید، نمی توانید برای هر یک از پرتال های خود صفحه ی 404 مخصوص به آن را داشته باشید و مجبورید که یک صفحه ی 404 عمومی برای آن داشته باشید. هیچ راهی برای ASP.NET وجود ندارد که صفحه خطای مخصوص آن پرتال را نمایش دهد، زیرا ASP.NET تنها یک اینستال دات نت نیوک را می بیند. تقسیم بندی پرتالی در داخل خود دات نت نیوک و توسط خود دات نت نیوک انجام می شود.
2. دات نت نیوک از خطاهای 404 لاگ نمی گیرد. اگر صفحه ی 404 خود را درست کنید می توانید بر روی آن ابزارهای تحلیل سایت را قرار دهید- اما دوباره می گوییم که بر روی نصب های چند پرتاله درست کار نمی کند. شما می تونید از لاگ IIS برای اینکار استفاده کنید.
3. تقریبا در همه ی سایت های ASP.NET اگر بر روی لینکی از آن سایت که خراب باشد کلیک کنیم، کد وضعیت درست 404 را به موتور جست و جو باز نمی گردانند. در واقع، شما کد وضعیت 302 که برای ارجاع هست را دریافت می کنید و بعد از آن هم کد وضعیت 200 Ok دریافت می شود. هنگامی که بر روی لینک خراب کلیک می شود، موتور جست و جو از روی کد وضعیت 302 فرض می کند که آدرس اصلی مطلب مورد نظر کاربر تغییر پیدا کرده و به جای آن آدرس اشتباه، صفحه ی 404 را فهرست می کند.

راهکار

من و دوستانم در شرکت رستا سعی داریم تا با ارائه ی یک ماژول برای دات نت نیوک مشکلاتی که در بالا اشاره شد را حل کنیم.
اما با توجه به اینکه من احتمالا سه ماه آینده را در دوران آموزشی سربازی به سر خواهم برد، معلوم نیست نوشتن این ماژول کی استارت خواهد خورد و کی تمام خواهد شد. سعی ما این هست که این ماژول را به صورت رایگان در اختیار دوست داران دات نت نیوک قرار دهیم.
اما فعلا تا قبل از اینکه این ماژول آماده شود بهتر است که صفحه 404 خودمان را در دات نت نیوک آماده کنیم.
این کار مشکل اول ما را تا حدود زیادی رفع می کند ولی برای حل مشکل دو و سه باید منتظر ماژول ماند!
اول از همه یک صفحه در داخل دات نت نیوک ایجاد کنید و کاری کنید که این صفحه در منو نیاید. من اسم این پیج را errorpage.aspx می گذارم.
حال کدهای زیر را در فایل web.config سایت خود قرار دهید.
1. در داخل فایل web.config ند system.webServer را بیابید و خطوط زیر را به آن اضافه کنید.

 

<httpErrors errorMode="Custom" >
          <remove statusCode="404" />
     <error statusCode="404" path=" /errorpage.aspx" responseMode="ExecuteURL"/>
    </httpErrors>

 

2. حال در همین فایل ند system.web را پیدا کرده و خط زیر را به آن اضافه کنید

 

<customErrors mode="On" defaultRedirect="ErrorPAge.aspx" />

حال هم خطای 404 شما از طرف IIS و هم از طرف ASP.NET به صفحه ی errorpage.aspx شما فرستاده می شود. این صفحه یک صفحه دات نت نیوک است مثل صفحات دیگر و شما می توانید اسکین آن را تغییر دهید، بر روی آن ماژول نصب کنید و یا جاوااسکریپت مربوط به ابزارهای تحلیل سایت را بر روی آن بارگذاری کنید.
توصیه ما این است که ماژول های Site map و جستجو حتما در این صفحه قرار داده شود.

نویسنده: مصطفی جواهری پور

موافقین ۰ مخالفین ۰ ۹۴/۱۲/۰۵

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی