روزنوشته های عباس شکیبا

خانه / برنامه نویسی / حل مشکل ریدایرکت کردن به دامنه جدید در وردپرس

حل مشکل ریدایرکت کردن به دامنه جدید در وردپرس

چند روز پیش بود که تصمیم گرفتم دامنه ی وبلاگ را عوض کنم، بلافاصله دست به کار شدم و به دنبال دامنه ی دیگری برای وبلاگ گشتم. در راه رفتن به عید دیدنی بود که دامنه ی جدید را سفارش دادم. ایده ای در رابطه با اینکه وبلاگ را چطور به دامنه ی جدید منتقل کنم،‌ نداشتم.  باید اول DNS ها را برای دامنه ی جدید ست ( Set ) می کردم تا به محض عوض کردن دامنه، وبلاگ از طریق آدرس جدید هم در دسترس باشد؟ یا چگونه باید دامنه ی قبلی با تمام لینک ها به آدرس جدید منتقل می کردم؟ و چندین سوال دیگر.

بالاخره به طور ناگهانی به داخل حوض پریدم و با مشکلات جدید روبرو شدم. بعد از انتقال دامنه، فقط صفحه ی اصلی دامنه ی قدیمی به آدرس mrshakia.ir منتقل میشد! یعنی همان مشکل همیشگی ریدایرکت ۳۰۱ نشدن همه ی آدرس ها در وردپرس!

چطور شد که داخل حوض پریدم؟

برای ریدایرکت کردن دامنه ی قدیمی به دامنه ی جدید لازم بود که بتوانم هر دو دامنه را از طریق یک هاست مدیریت کنم. به همین منظور تیکتی به پشتیبانی هاست ارسال کردم و پس از شرح ماجرا مبنی بر تغییر دامنه، درخواست کردم تا در مورد نحوه ی دسترسی همزمان به هر دو دامنه، من را راهنمایی کنند. جوابی که دریافت کردم از این قرار بود: «در واقع شما قصد دارید که دامنه ی متصل به هاست mrshakiba.ir باشد؟» با ارسال پاسخ مثبت من، حوالی ساعت یازده و نیم شب، بدون اینکه DNS ها را روی دامنه ی جدید ست (Set) کرده باشم، اکانت هاستینگ من به دامنه ی جدید متصل شد.

درست در همین زمان در حال نوشتن یک مطلب جدید برای وبلاگ بودم که متوجه شدم تغییرات نوشته ذخیره نمی شود، صفحه اصلی وبلاگ را رفرش (Refresh) کردم که متوجه شدم وبلاگ در دسترس نیست! و همین موقع بود که تیکتی مبنی بر تغییر دامنه ی متصل به هاست از طرف پشتیبانی دریافت کردم، متوجه شدم که پریده ام وسط حوض!

 

برای ریدایرکت کردن بدون خرید Addon Domain چه کاری انجام دادم؟

برای اینکار از قابلیت Alias Domain سی پنل استفاده کردم. با استفاده از این قابلیت می توان دو یا چند دامنه را به هم متصل نمود و در نهایت برای یک وبلاگ بتوان چندین دامنه تعریف کرد. درست مثل اینست که نام شما در شناسنامه عباس باشد، خانواده علی خطاب تان کنند و در جمع دوستان شما را مهدی بنامند. شما یک شخص هستید با چندین نام! Alias Domain هم دقیقا همین کار را برای وبلاگ شما انجام میدهد.

 

ریدایرکت ۳۰۱ با استفاده از .htaccess در وردپرس

برای انجام این کافیست سری به سایت هایی که کد htaccess تولید می کنند بزنید،‌ مثل سایت aleydasolis و بعد از وارد کردن آدرس جدید کد خود را دریافت کنید. کدی شبیه به این کد:

با اعمال این تغییرات فایل .htaccess من به این صورت می باشد.

صفحات داخلی وردپرس به دامنه ی جدید ریدایرکت نمی شود!

قصد داشتم که تمامی آدرس ها از دامنه ی قبلی با دامنه ی جدید باز شوند. اما همانطور که در مثال فوق ذکر شده است، فقط صفحه اصلی ( وردپرس ) به دامنه ی جدید منتقل شده و صفحات داخلی هم چنان از طریق آدرس قدیمی در دسترس بودند. کد های زیادی را امتحان کردم و حدود سه روز به دنبال پیدا کردن راه حل بودم. اما هر بار که با شکست مواجه می شدم به دنبال راه جدید و سرنخی بودم.

 

ریدایرکت نشدن و پیوند های یکتا در وردپرس

چند سال قبل که با وردپرس کار میکردم، پلاگینی نصب کردم که به درستی کار نمی کرد! بعد از جستجو متوجه شدم زمانی که از حالتی جز، حالت ساده ی پیوند های یکتای استفاده می کنم، پلاگین به مشکل می خورد، اما چون نمایش نام نوشته در آدرس از آن پلاگین مهم تر بود، پلاگین را حذف کردم.
به یاد آوردن همین یک نکته باعث شد تا سر نخی برای مشکل ریدایرکت نشدن به دست بیاورم. فورا پیوند های یکتا را به حالت ساده تغییر دادم، در این حالت مطالب وبلاگ از طریق آدرسی همانند آدرس زیر در دسترس خواهند بود.

با اعمال این تغییرات تمامی آدرس ها از دامنه ی قبلی به درستی به همان صفحه در آدرس جدید منتقل می شد.

محتویات فایل .htaccess در حالت پیوند های ساده

تفاوت محتویات فایل .htaccess در حالت پیوند های ساده و نمایش عنوان مطلب در آدرس، چند خط کد زیر بود.

که حالا با حذف این کد ها، محتویات جدید به این صورت بود:

از این مطالب می توان نتیجه گرفت که کد های مربوط به ریدایرکت ( Redirect ) با حضور کدهای مربوط به پیوند های یکتا، اصلا اجرا نمی شود!

 

راه حل اولیه ریدایرکت نشدن وردپرس

اولین راه حلی که به ذهنم رسید، تغییر ترتیب کد ها در فایل .htaccess بود، به این صورت که کد های مربوط به ریدایرکت را در ابتدای فایل و کد های مربوط به پیوند های یکتا را در انتهای فایل قرار دهم.

این بار ریدایرکت برای صفحات داخلی دامنه ی قدیمی نیز کار می کرد و کاربر به همان صفحه در آدرس جدید منتقل می شد. اما زمانی که کاربر به صفحه داخلی در آدرس جدید منتقل می شد، به توجه به سومین خط که تمامی آدرس ها را به mrshakiba.ir منتقل می کرد، آپاچی سعی می کرد، دوباره همین صفحه را به خودش منتقل کرده و پس از انتقال مجددا همین کار را تکرار کند و همین طور الی آخر … در نهایت این صفحه هرگز باز نمیشد!

 

راه حل نهایی مشکل ریدایرکت وردپرس در چه چیزی بود؟

آپاچی صفحات داخلی را به خودشان در آدرس جدید ریدایرکت می کرد و اینکار تا همیشه در آدرس جدید اتفاق می افتاد! برای جلوگیری از ریدایرکت کردن صفحه در آدرس جدید به خودش می بایست هر طور که شده به آپاچی می فهماندیم که تنها زمانی ریدایرکت را انجام دهد که کاربر از طریق آدرس قدیمی درخواست خود را ارسال کرده باشد. برای انجام اینکار کافی بود یک شرط به کد مربوط به ریدایرکت اضافه کنیم. ( اگر درخواست از طریق دامنه ی قدیمی ارسال شده بود آنگاه کاربر را به همان صفحه در آدرس جدید منتقل کن )

 

کدهای نهایی ریدایرکت تمامی صفحات و آدرس ها به دامنه ی جدید در وردپرس

در نهایت این هم کدی که مشکل ریدایرکت نشدن تمامی صفحات وردپرس به دامنه ی جدید را حل خواهد نمود. دقت داشته باشید همانطور که قبلا هم اشاره کردم، زمانی برای انتقال سایت وردپرسی خود به دامنه ی جدید به مشکل می خورد که تنظیمات پیوند های یکتای وردپرس را تغییر داده باشید!

 

حذف لاگ گرفتن از کتابخانه ی TelegramBotPHP ( کتابخانه ای برای ساخت ربات تلگرام )
تغییر آدرس وبلاگ؛ همزمان با سال نو