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

انتقال یا ریدایرکت (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 پرداختیم، اگر در این مورد سوال یا نظری داشتید، خوشحال می‌شویم که در بخش نظرات آن را با ما و کاربران سون لرن به اشتراک بگذارید.

 
ارسال دیدگاه
ما همه سوالات و دیدگاه ها رو می خونیم و پاسخ میدیم
۵۳ دیدگاه
yesterday ۲۷ آذر ۱۳۹۹، ۲۳:۲۷
در سایت شما مانند برخی از سایت ها، در انتهای هر پست «نمایش دیدگاه های بیشتر» وجود دارد که با کلیک روی آن تعداد معینی از دیدگاه ها نمایش داده می شود و این امر ادامه می یابد تا تمام دیدگاه ها نمایش داده شود.
برای افزودن این قابلیت به سایت از چه کدی می توان استفاده کرد؟
نازنین کریمی مقدم ۰۹ دی ۱۳۹۹، ۱۴:۱۱
درود.
کاری که قصد انجامش رو دارید paging نظرات هست. شما برای این کار راه حلهای مختلفی دارید(استفاده از ajax و یا از پلاگین) در آینده یک مقاله رو برای آموزش مرحله به مرحله اختصاص میدیم. تا اون زمان میتونید این آموزش انگلیسی رو مطالعه کنید.
yesterday ۲۷ آذر ۱۳۹۹، ۲۳:۲۳
با سلام
وقتی کاربر از باکس ورود که در ساید بار سایت قرار می گیرد، وارد سایت می شود، همان صحفه قبل برای رفرش می شود و کاربر واردشده تشخیص داده شده و می توان به محتوای قفل شده دسترسی یابید.
اما وقتی کاربر از لینک ورودی
http://www.yoursite.com/wp-login.php
که در منو قرار دارد استفاده می کند و وارد سایت می شود، به رفرش شدن صفحه به مانند یا هدایت شدن به آن صفحه ، به پیشخوان وردپرس هدایت می شود.
برای حل مشکل از چه کدی می توان استفاده کرد؟
با تشکر
نازنین کریمی مقدم ۰۹ دی ۱۳۹۹، ۱۳:۵۱
درود.
کاری که قصد دارید انجام بدید ریدایرکت به صفحه فعلی هست و شما با اضافه کردن یک کد php ساده به بخش لاگین به راحتی میتونید این کار رو انجام بدید. کد رو در پاسخهای این لینک میتونید ببینید.
ایران بوی ۱۸ مهر ۱۳۹۹، ۲۰:۴۷
سلام خسته نباشید.این کار برای چت روم هم موثر هست وقتی یه دامنه تحریم میشه یا فیلتر بخوام انتقالش بدم به دامنه بعدیم
امیر ۱۱ مهر ۱۳۹۹، ۱۵:۴۷
سلام اگر بخوایم قبل موقع پرداخت کاربر به سایت دیگه منتقل بشه و از اون سایت دیگر به درگاه متصب بشه چه کدی باید قرار بدیم
نازنین کریمی مقدم ۱۱ مهر ۱۳۹۹، ۱۹:۱۶
سلام.
بحث درگاه بانکی یکم مفصل تر از این حالت هست چون مسائل امنیتی مطرح میشه و درگاه های بانکی خودشون یسری پروتکل خاص دارند.
توصیه میکنم آموزش درگاه پرداخت اینترنتی رو تهیه کنید که در دو بخش ارائه شده.
ممنون که با ما همراه هستید.
حمزه ۰۳ تیر ۱۳۹۹، ۱۶:۱۶
عالی بود استاد
من از تابع header استفاده میکردم ارور میداد با اینکه کل اسپیس ها و موارد گفته شده رو چک کردم نزدیک 2 روز درگیرش بودم که در نهایت این فانکشن شما بود ک به داد من رسید
مرسی بازم
نازنین کریمی مقدم ۱۹ شهریور ۱۳۹۹، ۲۳:۵۲
سلام. خوشحالیم که مقاله براتون مفید بوده.
hhh ۳۱ خرداد ۱۳۹۹، ۲۱:۲۶
سلامممنون ازمطالب مفیدی که گزاشتین..من یه جزیی دارم..راهنماییم کنیدممنون میشم
من یه پیغام خطامیخوام برای حذف کاربردرتگ a
البته پیغام دارما.امابراقبل حذف میخوام
فائقه نامور ۱۹ مرداد ۱۳۹۹، ۲۱:۳۶
سلام ممنون از توجه شما
موردی که اشاره فرمودید به تیم تولید محتوا انتقال داده می شود
حسین سلیمی ۳۱ اردیبهشت ۱۳۹۹، ۰۳:۱۴
عالی بود و خیلیم به جا
فائقه نامور ۰۷ خرداد ۱۳۹۹، ۱۶:۰۳
خواهش می کنم
ممنون از توجه شما
علی ۰۵ اردیبهشت ۱۳۹۸، ۱۲:۰۶
دستتون درد نکنه
هادی پولادوند ۲۷ فروردین ۱۳۹۸، ۰۳:۱۷
درود بر شما..ممنون
Mahmood B ۰۸ آذر ۱۳۹۷، ۲۲:۲۹
مطلب خوبی بود سون لرن :)[codeBox]<7learn>
i love you :)
</7learn>[/codeBox]
آرش کریمی ۳۱ مرداد ۱۳۹۷، ۰۰:۳۶
میدونم دوست عزیز ، منظورم اینه که چرا گوگل با دامنه اصلی جایگزینش نمیکنه؟!!
خواهشن یکم به عرایض بنده دقت کنید دیگه نمیدونم چطوری منظورمو به شما برسونم
آرش کریمی ۳۰ مرداد ۱۳۹۷، ۱۷:۲۸
سلام مجدد
پس چرا در مورد سایتی که گفتم اینطور نیست و دامنه جایگزین نمیشه؟!!
مصطفی قدیمی ۳۰ مرداد ۱۳۹۷، ۲۳:۳۰
اون دامنه که داره ریدایرکت میشه دامنه فرعی هستش که به دامنه اصلی ریدایرکت میشه ...
آرش کریمی ۳۰ مرداد ۱۳۹۷، ۱۵:۳۵
درود
پس چرا گوگل آدرس دامنه ش رو عوض نمیکنه ؟!
مگه ریدایرکت ۳۰۱ برای این نیست که به گوگل حالی کنیم که آدرس دامنه ما عوض شده؟!
مصطفی قدیمی ۳۰ مرداد ۱۳۹۷، ۱۶:۱۹
با سلالم و احترام
بله ریدایرکت 301 تمامی اعتبار سایت رو منتقل میکنه و به گوگل و سایر موتور جستجوگر میگه که این همون مصالب فقط با آدرس جدید و اعتباری که قبلا هم داشته منتقل میشه
آرش کریمی ۲۸ مرداد ۱۳۹۷، ۱۹:۰۰
سرکارمون گذاشتی من میگم نمیخوام ریدایرکت 301 انجام بدم میخوام دقیقا مثل این لینک عمل کنم eurocccam.tk این دامنه با اینکه ریدایرکت کرده بخوبی تو گوگل ایندکس شده
مصطفی قدیمی ۲۸ مرداد ۱۳۹۷، ۲۱:۲۰
دوست عزیز این ریدایرکت 301 هست من متوجه نمیشم شما چی میگی !

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

شما میتونی با این سایت چک کنی و مطمئن بشی !
http://www.redirect-checker.org/index.php
آرش کریمی ۲۸ مرداد ۱۳۹۷، ۰۰:۰۶
خب چطوری میتونم استفاده کنم بدون اینکه آدرس دامنه اصلیم ایندکسش از بین نره؟!!
مصطفی قدیمی ۲۸ مرداد ۱۳۹۷، ۱۰:۵۰
بهتره از کد های ریدایرکت 301 استفاده بکنید و یا از پنل هاستتون اقدام به انجام انتقال کنید
آرش کریمی ۲۷ مرداد ۱۳۹۷، ۱۱:۰۵
دروذ
ولی یکسری از سایتها هستند که مدت خیلی زیادی اینکارو کردند و بدون هیچ مشکلی تو صفحه اول گوگل هستند اگر اشکالی نداره دو سه تا لینک اینجا مثال بزنم
مصطفی قدیمی ۲۷ مرداد ۱۳۹۷، ۱۱:۲۴
دوست عزیز این کار خلاف قوانین و الگوریتم گوگل هست شما میتونی استفاده کنی اما تاثیر منفی تو ورودی هاتون میذاره
آرش کریمی ۲۶ مرداد ۱۳۹۷، ۲۳:۳۱
سلام
گفتم که نمیخوام ریدایرکت ۳۰۱ کنم کلی توضیح دادم آخرسر جوابی که خودم میدونستم بهم دادید!!
مصطفی قدیمی ۲۷ مرداد ۱۳۹۷، ۱۰:۳۷
سلام دوست عزیز
بهترین روش استفاده از کد 301 هست برای انتقال این انتقالی که شما میگی میشه از طریق جاوا اسکریپت انجام داد سرچ کنید کد انتقال وبلاگ یه سری سیستم های آماده هستند که کد رو ایجاد میکنند ولی سایتتون دچار مشکل سئو میشه روش مناسبی نیست جز عوامل سئو سیاه محسوب میشه این کار
آرش کریمی ۲۶ مرداد ۱۳۹۷، ۱۹:۲۴
درود به شما
من دامنه ای دارم که در گوگل به خوبی ایندکس شده و حالا میخوام ریدایرکت کنم به یک دامنه جدید بدون اینکه ایندکس ها و آدرس قبلی دامنه در گوگل عوض بشه یعنی میخوام همون دامنه قبلی در گوگل باقی بمونه و فقط کاربر به آدرس جدید هدایت بشه یعنی گوگل دامنه قبلی رو با دامنه جدید عوض نکنه لطفا راهنمایی کنید از چه کدی و کجا باید استفاده کنم.
با تشکر از سایت خوبتون
مصطفی قدیمی ۲۶ مرداد ۱۳۹۷، ۲۲:۳۹
سلام وقت بخیر شما باید از کد ریدایرکت 301 استفاده کنید ولی مشکلی که هست دامنه شما هم تغییر میکنه اما اعتبار دامنه قبلی منتقل میشه روی دامنه جدید و مشکلی برای سئو سایتتون پیش نمیاره اما حتما از یه سئو کار کمک بگیرید که کار به درستی انجام بشه
amir baragy ۲۱ مرداد ۱۳۹۵، ۱۸:۵۵
بیشتر در چه کجا ها از این تابع استفاده می کنیم؟
آیا بعد از توابع خاصی باید از این تابع استفاده کنیم؟
"تشکر"
وحید صالحی ۲۱ مرداد ۱۳۹۵، ۱۹:۰۴
از نامش مشخص هست برای منتقل کردن کاربر به یک مکان دیگه مثلا بعد از اینکه کاربر در سایه لاگین کرد و وارد شد به یه صفحه خاص در سایت منتقلش کنیم
amir baragy ۱۵ مرداد ۱۳۹۵، ۲۳:۳۰
سلام
میخواستم بدونم دلیل استفاده از تابع exit; بعد از header چیست؟
شخصی گفت برای امنیت هست ولی من متوجه نشدم، یعنی بعد از اینکه هدر شد کد های بعدی اجرا نشن ؟
میشه یه ذره بیشتر توضیح بدین.
"تشکر"
لقمان آوند ۱۶ مرداد ۱۳۹۵، ۰۲:۳۱
خوب اینجا نمی خوایم بعد از ریدایرکت کد دیگه ای در اسکریپت اجرا بشه. هم بار پردازشی سرور کم میشه و هم از اجرای ناخواسته بعضی کدها بعد از ریدایرکت جلوگیری میشه !
هادی ۱۴ آذر ۱۳۹۴، ۲۲:۳۰
سلام استاد
من تازگیا یه وبلاگ درست کردم با این آدرس http://daneshpaghooh.mihanblog.com
تو یه قسمت نمونه سوال خواستم بذارم میخوام که کاربر وقتی روی گزینه مثلا متوسطه اول کلیک میکنه وارد صفحه جدیدی بشه لطف کنین بگین آیا از این راهی که شما گفتین میتونم برم یا باید روش دیگه ای رو بکار بگیرم.
ممنون
وحید صالحی ۱۷ آذر ۱۳۹۴، ۱۰:۳۲
روس سیستم های وبلاگ دهی نمیتونید این مورد رو پیاده سازی کنید
sadaf ۱۶ آبان ۱۳۹۴، ۱۲:۳۸
منظورتون از ارسال هدر ها چیه؟
میشه در این مورد توضیح کامل تری بگین؟
وحید صالحی ۱۶ آبان ۱۳۹۴، ۲۰:۰۹
تابع ( ) header ، یک دستور HTTP را که یک url و به عبارتی آدرس هست رو به مرورگر کاربر ( client ) ارسال می کنه.
از دستورات HTTP برای ارسال کدهایی که می خواهید قبل از هرگونه پردازش یا تولید خروجی صفحه ، توسط وب سرور اجرا بشن استفاده می کنیم.
برای آشنایی بیشتر به لینک زیر مراجعه کنید
http://php.net/manual/en/function.header.php
مهدی ۲۹ مهر ۱۳۹۴، ۰۴:۱۲
ممنون. کاربردی بود
ramin ۲۷ اردیبهشت ۱۳۹۴، ۰۳:۲۳
سلام . توی وبلاگ blog.ir نمیششه هر اسکریپتی خواستی قرار بدی. و باید پول بدی. آیا این به خاطر تگ no script توی هده؟ اگر آره چطور میشه اینو در ویرایش قالب حذف کرد؟ (البته توی ویرایش نشون داده نمیشه) یا میشه بالای اون قسمت چیزی اضاف کرد ک اثرش رو خنثی کنه؟
لقمان آوند ۲۷ اردیبهشت ۱۳۹۴، ۲۳:۰۸
خیر به خاطر noscript نیست . این مورد به صورت سیستمی چک می شه و شما نمی تونید کاریش کنید .
Master HK ۲۵ اسفند ۱۳۹۳، ۱۰:۳۲
سلام.
خیلی خوب بود... :)
ali ۲۴ اسفند ۱۳۹۳، ۰۸:۵۲
سلام
من یه سایت چند زبانه دارم و می خوام کاربر وقتی آدرس سایت را زد مستقیم به پوشه http://mydomain.com/fa منتقل بشه. البته نمی خوام از نظر سئو مشکلی پیش بیاد.
چکار کنم؟
وحید صالحی ۲۶ اسفند ۱۳۹۳، ۱۴:۳۰
میتونید با جاوا اسکریپت این کار رو انجام بدید در سایت جستجو کنید آموزشی در این زمینه موجوده...
بابک ۲۳ مهر ۱۳۹۳، ۱۷:۲۲
تو مدل ریدایرکتی که با جاوا اسکریپت کردید میشه از طریق $_POST پارامتری رو به صفحه دوم فرستاد ؟ چون تو مدل هدر میشه و بدون مشکل اما تو مدل جاوا چطور ؟
noro ۱۷ اردیبهشت ۱۳۹۳، ۲۱:۴۲
با سلام

اینجا چطوری لینک دانلودو ردارکت کردید؟

https://7learn.com/open?u=http://s.7Learn.com/uploads/2014/01/p41-safe-user-redirect.zip

یه چیزی مثل این می خوام و راحت باشه کار کردن باهاش و وقت زیاد نگیره
وحید صالحی ۱۷ اردیبهشت ۱۳۹۳، ۲۲:۳۰
سلام
این مطلب رو مطالعه کنید
کیوان علی محمدی ۱۸ اردیبهشت ۱۳۹۳، ۱۰:۲۶
سلام یه نمونه ساده از این رو قبلا آموزش دادیم.این مطلب رو بخونید.
Tina ۱۷ اسفند ۱۳۹۲، ۱۸:۳۳
واقعا ممنونم
N a S e R ۱۳ دی ۱۳۹۲، ۰۵:۱۷
عالی بود :?:
حسین محمدی ۱۲ دی ۱۳۹۲، ۱۹:۴۵
ممنون استاد...
headers_sent() چیکار میکنه؟؟؟
لقمان آوند ۱۲ دی ۱۳۹۲، ۲۱:۰۲
چک میکنه اگه هدر ارسال شده باشه true و در غیر این صورت false رو بر میگردونه