جشنواره فطر سون لرن

ریدایرکت در php : کد کامل انتقال به صفحه دیگر در php

دسته بندی: برنامه نویسی
زمان مطالعه: 3 دقیقه
۲۴ اردیبهشت ۱۳۹۹

انتقال یا ریدایرکت (Redirect) کاربر به صفحه دیگر در زبان‌های برنامه نویسی سمت بک اند از جمله PHP خیلی مورد نیاز هست و همه شما معمولا در طراحی‌های خود می‌خواهید کاربر را از صفحاتی به صفحه دیگه ای منتقل و یا به اصطلاح ریدایرکت (Redirect) کنید، مثل صفحه لاگین و صفحه مدیریت و ...، کد هایی که استفاده می‌کنید شاید بعضی مواقع خطا یا هشداری ایجاد کند یا اصلا کار نکند.

یک تابع php همه فن حریف برای ریدایرکت و انتقال کاربر در php

قبل از هر چیزی تابع کاملی که نوشتیم را می‌توانید در زیر مشاهده و استفاده نمایید. در ادامه به توضیح کامل این کد جالب می‌پردازیم:

<?php
function redirect($url)
{
    if (!headers_sent()){
        header("Location: $url");
    }else{
        echo "<script type='text/javascript'>window.location.href='$url'</script>";
        echo "<noscript><meta http-equiv='refresh' content='0;url=$url'/></noscript>";
    }
    exit;
}
?>

تابع فوق شرایط مختلف ر در نظر گرفته و در  هر شرایطی کار می‌کند. شما می‌توانید با خیالی آسوده از آن استفاده کنید. توضیحات تابع را بخوانید:

انتقال و ریدایرکت به صفحه دیگر توسط php در صورت ارسال نشدن هدرها از قبل

در ابتدا ما بررسی می‌کنیم تا هدر‌های صفحه ارسال نشده باشد ،اگر ارسال نشده، می‌توانیم با کدهای php کاربر جاری را به صفحه جدید انتقال بدهیم و ریدایرکت کنیم. این مورد را در بلاک if در کد زیر می‌توانید ببینید:

header("Location: $url");

انتقال کاربر توسط جاوا اسکریپت در صورت ارسال شدن هدرها از قبل

در صورتی که هدر قبلا ارسال شده باشد و ما از دستور header استفاده کنیم یک هشدار ناخوشایند دریافت می‌کنیم. همان هشدار معروف header already sent ، که تقریبا هر برنامه نویس php با آن آشنا است، و حداقل یک بار با آن بر خورد کرده است. در این حالت ما از جاوا اسکریپت استفاده می‌کنیم تا بدون اینکه با خطایی مواجه شویم کاربر را ریدایرکت کنیم. در خط اول بلاک else این مورد را می‌توانید ببینید. پس اگه هدر‌ها ارسال شده باشد ما دیگر از php استفاده نمی‌کنیم و جاوا اسکریپت را جایگزین می‌کنیم و  با کد indow.location.href کاربر را انتقال می‌دهیم. مطابق کد زیر:

echo "<script type='text/javascript'>window.location.href='$url'</script>";

انتقال کاربر به صفحه دیگر در صورت غیرفعال بودن جاوااسکریپت

حتما نگران هستید که ممکن است کاربر در مرورگرش جاوا اسکریپت رو هم غیر فعال کرده باشد؟  اگر جاوا اسکریپت غیر فعال باشد چه اتفاقی می‌افتد؟ این مشکل را  هم می‌توانید با یک تگ noscript حل کنید و کاربر را با HTML و تگ متا به صفحه جدید انتقال دهید. مطابق کد زیر:

echo "<noscript><meta http-equiv='refresh' content='0;url=$url'/></noscript>";

انتهای تابع هم ما از یک دستور exit استفاده کردیم تا اجرای اسکریپت متوقف شود. اگر این کد را نگذارید هم‌زمان با اینکه کاربر ریدایرکت می‌شود ادامه اسکریپت php همچنان اجرا می‌شود در صورتی که دیگر به آن نیاز نداریم و کاربر از آن صفحه به جای دیگری منتقل شده است.

نحوه استفاده از تابع ریدایرکت کاربر به صفحه جدید

تابع PHP که در ابتدای مقاله برای شما نوشتیم، را داخل کدهای php خود تعریف کنید، و بعد از آن به راحتی می‌توانید، در هر صفحه ای که می‌خواهید، به آدرس دیگری منتقل شود، استفاده کنید. به طور مثال اگر می‌خواهید صفحه شما به 7Learn.com منتقل شود، تنها کافی است در آن صفحه به این شکل از این تابع استفاده کنید:

redirect("https://7learn.com"); 

در این مقاله به توضیح نحوه‌ی ریدایرکت در php پرداختیم، اگر در این مورد سوال یا نظری داشتید، خوشحال می‌شویم که در بخش نظرات آن را با ما و کاربران سون لرن به اشتراک بگذارید.

چه امتیازی به این مقاله می دید؟
نویسنده لقمان آوند
بیش از 15 سال هست که برنامه نویسی می کنم و از بین همه زبون هایی که کار کردم جاوا، اسمبلی و php رو دوست دارم. دانشجوی دکترای نرم افزارم و توی دانشگاه روی پردازش بیگ دیتا و پردازش موازی کار کردم و عاشق چالش از هر نوعیش هستم! سون لرن مثل بچه منه که 12 سال براش وقت گذاشتم، اینجا همه تلاش می کنیم از شروع یادگیری تا ورود به بازر کار حوزه برنامه نویسی و IT همراهتون باشیم.

نظرات کاربران

علی

دستتون درد نکنه

هادی پولادوند

درود بر شما..ممنون

Mahmood B

مطلب خوبی بود سون لرن 🙂

<7learn>
i love you :)
</7learn>
آرش کریمی

میدونم دوست عزیز ، منظورم اینه که چرا گوگل با دامنه اصلی جایگزینش نمیکنه؟!!
خواهشن یکم به عرایض بنده دقت کنید دیگه نمیدونم چطوری منظورمو به شما برسونم

آرش کریمی

سلام مجدد
پس چرا در مورد سایتی که گفتم اینطور نیست و دامنه جایگزین نمیشه؟!!

مصطفی قدیمی

اون دامنه که داره ریدایرکت میشه دامنه فرعی هستش که به دامنه اصلی ریدایرکت میشه …

آرش کریمی

درود
پس چرا گوگل آدرس دامنه ش رو عوض نمیکنه ؟!
مگه ریدایرکت ۳۰۱ برای این نیست که به گوگل حالی کنیم که آدرس دامنه ما عوض شده؟!

مصطفی قدیمی

با سلالم و احترام
بله ریدایرکت 301 تمامی اعتبار سایت رو منتقل میکنه و به گوگل و سایر موتور جستجوگر میگه که این همون مصالب فقط با آدرس جدید و اعتباری که قبلا هم داشته منتقل میشه

آرش کریمی

سرکارمون گذاشتی من میگم نمیخوام ریدایرکت 301 انجام بدم میخوام دقیقا مثل این لینک عمل کنم eurocccam.tk این دامنه با اینکه ریدایرکت کرده بخوبی تو گوگل ایندکس شده

مصطفی قدیمی

دوست عزیز این ریدایرکت 301 هست من متوجه نمیشم شما چی میگی !

https://eurocccam.tk
301 Moved Permanently
https://eurocccam.tk
302 Found
https://eucccam2.xyz/
200 OK

شما میتونی با این سایت چک کنی و مطمئن بشی !
https://www.redirect-checker.org/index.php

آرش کریمی

خب چطوری میتونم استفاده کنم بدون اینکه آدرس دامنه اصلیم ایندکسش از بین نره؟!!

مصطفی قدیمی

بهتره از کد های ریدایرکت 301 استفاده بکنید و یا از پنل هاستتون اقدام به انجام انتقال کنید

آرش کریمی

دروذ
ولی یکسری از سایتها هستند که مدت خیلی زیادی اینکارو کردند و بدون هیچ مشکلی تو صفحه اول گوگل هستند اگر اشکالی نداره دو سه تا لینک اینجا مثال بزنم

مصطفی قدیمی

دوست عزیز این کار خلاف قوانین و الگوریتم گوگل هست شما میتونی استفاده کنی اما تاثیر منفی تو ورودی هاتون میذاره

آرش کریمی

سلام
گفتم که نمیخوام ریدایرکت ۳۰۱ کنم کلی توضیح دادم آخرسر جوابی که خودم میدونستم بهم دادید!!

مصطفی قدیمی

سلام دوست عزیز
بهترین روش استفاده از کد 301 هست برای انتقال این انتقالی که شما میگی میشه از طریق جاوا اسکریپت انجام داد سرچ کنید کد انتقال وبلاگ یه سری سیستم های آماده هستند که کد رو ایجاد میکنند ولی سایتتون دچار مشکل سئو میشه روش مناسبی نیست جز عوامل سئو سیاه محسوب میشه این کار

آرش کریمی

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

مصطفی قدیمی

سلام وقت بخیر شما باید از کد ریدایرکت 301 استفاده کنید ولی مشکلی که هست دامنه شما هم تغییر میکنه اما اعتبار دامنه قبلی منتقل میشه روی دامنه جدید و مشکلی برای سئو سایتتون پیش نمیاره اما حتما از یه سئو کار کمک بگیرید که کار به درستی انجام بشه

amir baragy

بیشتر در چه کجا ها از این تابع استفاده می کنیم؟
آیا بعد از توابع خاصی باید از این تابع استفاده کنیم؟
“تشکر”

وحید صالحی

از نامش مشخص هست برای منتقل کردن کاربر به یک مکان دیگه مثلا بعد از اینکه کاربر در سایه لاگین کرد و وارد شد به یه صفحه خاص در سایت منتقلش کنیم

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :