چگونه از شکسته شدن لينک‌ها در سايتمان جلوگيري کنيم؟

iman_ebru

Active Member
درحال جستجوی یه مطلب بودم که اتفاقی به این مقاله برخورد کردم. برام جالب بود و برای همین خواستم اینجا بزارم تا بقیه دوستان هم استفاده کنند.

البته این آموزش برای دات نت هست. سعی میکنم همین آموزش رو برای PHP هم آماده کنم.
این آموزش از وبلاگ http://behrooznp.com/weblog/ برگرفته شده :

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +

همانطور که قبلا گفته بودم، دراين يادداشت مي‌خواهم توضيح دهم که چگونه آدرس برخي صفحات يک سايت را به طور خودکار به آدرس‌هاي جديد تبديل کنيم. به عنوان نمونه، چنانکه مشاهده مي‌کنيد که لينک يک يادداشت در آدرس قبلي وبلاگم مثل اين ه آدرس جديد آن یعنی این بديل مي‌شود. ابتدا بگويم که اهميت اين کار در چيست. يادم مي‌آيد که هنگامي که سايت آي‌تي ايران با ظاهر و هيات کنوني آن جاي نسخه قبلي را مي‌گرفت، يادداشتي نوشتم و تاکيد کردم که الگوي جديد آدرس لينک مقالات در سايت جديد آي‌تي ايران با الگوي قبلي فرق دارد و در نتيجه هزاران لينکي که در سايت‌هاي فارسي زبان به مقالات و اخبار اين سايت تا ان زمان داده شده بود همگي شکسته شده‌اند. اين يک مثال بارز از مشکلي است که درباره آن صحبت مي‌کنيم. طبيعتا اين مشکل هم براي سايت آي‌تي ايران و هم براي دهها سايت فارسي زبان که به آن لينک داده‌اند يک خسارت معنوي محسوب مي‌شود.
ما دارندگان سايت‌هاي اينترنتي بايد دقت کنيم که آنچه که در سايتهاي ما منتشر مي‌شود به تدريج يک اتمسفر محتوايي بسيط و فراگير در حوزه زبان فارسي پيرامون خود ايجاد مي‌کند که مانند راهنمايي براي جويندگان اطلاعات عمل مي‌کند و به خودي خود داراي ارزش است. اما نکته مهم اين است که تمام کارکرد اين اتمسفر بستگي تام به زنده بودن و سلامتي لينک‌هايي دارد که اين شبکه محتوايي را ايجاد کرده است. بنابراين خيلي مهم است که اين شبکه تار عنکبوتي را بدقت حفظ کنيم.
اما اين کار چگونه ممکن است؟ من روش کار را با استفاده از ASP.NET توضيح مي‌دهم. در تکنولوژي‌هاي ديگر نيز بايد به روش مشابه عمل کرد. خوشبختانه ديدم که حامد مقاله نسبتا کاملي در اين زمينه در وبلاگ خودش درج کرده و من را از بازگويي جزئيات تکنيکي کار بي‌نياز کرده است. بنابراين توجه شما را به خواندن مقاله باز نویسی URL در ASP.NET جلب مي‌کنم اما براي تکميل مطلب اين دوست عزيزم دو سه نکته تجربي را هم اضافه مي‌کنم.
نکته اول اينست که بهتر است براي ايجاد يک نظم و ترتيب سازمان يافته در تکنيک مذکور، يک ليست از جنس XML شامل آدرس‌هاي قديمي و معادلهاي جديد آن ايجاد کنيم و از برنامه خود بخواهيم که ابتداي بارگذاري نرم‌افزار در حافظه اين ليست را بخواند و در حافظه نگاه دارد. اين کار را مي‌توانيم مثلا به اين صورت و از طريق تابع Application_Start در Global.asa انجام دهيم :

کد:
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)

        Dim doc As XmlDocument

        Dim path As String



        '----- Page Mappings

        doc = New XmlDocument

        path = Server.MapPath("redirect.xml")

        If File.Exists(path) Then

            doc.Load(path)

        End If

        Application("PageMappings") = doc



    End Sub

ليست XML که من خودم استفاده مي‌کنم به اين صورت است و شما اگر مايل بوديد مي‌توانيد از همين فرمت استفاده کنيد :

کد:
?xml version="1.0" encoding="utf-8" ?> 

<Pages>

   <Page OldPath='/page1.aspx' NewPath='/page2.aspx' />

   <Page OldPath='/page3.aspx' NewPath='/page4.aspx' />

</Pages>

دقت کنيد که براي لينک‌هايي که از الگوي ثابتي استفاده مي‌کنند (مثلا article.aspx?id=12345) کافي است نام صفحه‌اي که اين الگوي ثابت را ايجاد مي‌کند در ليست بياوريم. به اين ترتيب همه صفحاتي که داراي اين الگو هستند به آدرس و الگوي جديد تبديل خواهند شد. با همين ترفند کوچک مي‌توان از شکسته شدن هزاران لينک در اينترنت جلوگيري کرد.

نکته دوم اينکه اگر الگوي جديد شامل يک domain کاملا جديد است (يعني مانند مورد همين وبلاگ، آدرس اصلي سايت بکلي تغيير کرده است) بايد يک صفحه کمکي در سايت قبلي (آدرس قديمي) قراردهيد که وظيفه Redirection را به عهده داشته باشد و اين صفحه و کل مکانيزم بازنويسي URL را به همراه فايل XML ماهها و بلکه چند سال روي همان سايت نگهداريم. به عنوان مثال من در سايت Infotechmedia.com يک صفحه به نام Links.aspx درست کرده‌ام که الگوهاي قديمي لينک‌ها را به آدرسهايي کاملا خارج از اين سايت هدايت مي‌کند. بنابراين ليست XML اين سايت چيزي شبيه اين است:

کد:
<?xml version="1.0" encoding="utf-8" ?> 

<Pages>

   <Page OldPath='/behrooznp/default.aspx' 

     NewPath='/behrooznp/Links.aspx?L=http://behrooznp.com/weblog' />

   <Page OldPath='/behrooznp/blogarchive.aspx' 

     NewPath='/behrooznp/Links.aspx?L=http://behrooznp.com/weblog/blogarchive.aspx' />

   <Page OldPath='/behrooznp/rss.aspx' 

     NewPath='/behrooznp/Links.aspx?L=http://behrooznp.com/weblog/rss.aspx' />

</Pages>

من ليست مذکور را از طريق روتيني شبيه روتين زير که داخل تابع Application_BeginRequest قرارداده شده است فراخواني و پردازش مي‌کنم:


کد:
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)

        '----- Page Mappings

        Dim doc As XmlDocument

        Dim root As XmlElement

        Dim xNode As XmlNode

        Dim NewPath As String

        Dim xpath As String



        doc = Application("PageMappings")

        If Not doc Is Nothing Then

            root = doc.DocumentElement

            If Not root Is Nothing Then

                xpath = "//Page[@OldPath='" + Request.Path.ToLower() + "']"

                xNode = root.SelectSingleNode(xpath)

                If Not xNode Is Nothing Then

                    NewPath = xNode.Attributes.ItemOf("NewPath").Value()

                    Context.RewritePath(NewPath)

                End If

            End If

        End If



    End Sub

ه اين ترتيب هربار که نرم‌افزار Restart مي‌شود يا متغير Application(“PageMappings”) تغيير داده مي‌شود. ليست جديد داخل حافظه بارگذاري مي‌شود و مورد استفاده قرار مي‌گيرد. به اين ترتيب مي‌توان مرتبا به ليست مذکور رکوردهايي افزود و بدون دستکاري سورس کد برنامه، صفحات ديگري را نيز وارد اين فرآيند کرد.
اين کار براي هر سايت اينترنتي فعالي ضروري است. بارها پيش مي‌آيد که مي‌خواهيم محل يک صفحه را تغيير دهيم و آن را در پوشه يا مکان ديگري بگذاريم و يا ساختار اطلاعات سايت را دستکاري کنيم اما حواسمان نيست که ممکن است بازديدکنندگان سايتمان در سايت‌هاي خودشان يا در قسمت Favorites مرورگرشان اين آدرسهاي قديمي را ذخيره کرده باشند و در مراجعات بعدي دچار دردسر شوند. تهيه يک ليست با فرمت XML مديريت اين آدرس‌هاي تغيير يافته را آسان و منطقي مي‌کند
 

worldman_safa

Active Member
جالب بود
8.gif


خیلی ممنون
 

جدیدترین ارسال ها

بالا