انتقال یا ریدایرکت (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 کاربر را انتقال میدهیم. مطابق کد زیر:
انتقال کاربر به صفحه دیگر در صورت غیرفعال بودن جاوااسکریپت
حتما نگران هستید که ممکن است کاربر در مرورگرش جاوا اسکریپت رو هم غیر فعال کرده باشد؟ اگر جاوا اسکریپت غیر فعال باشد چه اتفاقی میافتد؟ این مشکل را هم میتوانید با یک تگ noscript حل کنید و کاربر را با HTML و تگ متا به صفحه جدید انتقال دهید. مطابق کد زیر:
انتهای تابع هم ما از یک دستور exit استفاده کردیم تا اجرای اسکریپت متوقف شود. اگر این کد را نگذارید همزمان با اینکه کاربر ریدایرکت میشود ادامه اسکریپت php همچنان اجرا میشود در صورتی که دیگر به آن نیاز نداریم و کاربر از آن صفحه به جای دیگری منتقل شده است.
نحوه استفاده از تابع ریدایرکت کاربر به صفحه جدید
تابع PHP که در ابتدای مقاله برای شما نوشتیم، را داخل کدهای php خود تعریف کنید، و بعد از آن به راحتی میتوانید، در هر صفحه ای که میخواهید، به آدرس دیگری منتقل شود، استفاده کنید. به طور مثال اگر میخواهید صفحه شما به 7Learn.com منتقل شود، تنها کافی است در آن صفحه به این شکل از این تابع استفاده کنید:
redirect("https://7learn.com");
در این مقاله به توضیح نحوهی ریدایرکت در php پرداختیم، اگر در این مورد سوال یا نظری داشتید، خوشحال میشویم که در بخش نظرات آن را با ما و کاربران سون لرن به اشتراک بگذارید.
۵۷ دیدگاه
۳۰ شهریور ۱۴۰۱، ۱۲:۰۲
سلام چطور باید تشخیص بدیم که این کاربر کیست با php و برای هر کاربر چیز خاصی نمایش دهد
نازنین کریمی مقدم۰۹ مهر ۱۴۰۱، ۱۰:۴۵
درود
کافیه که بعد از ورود، در صفحه جدید که ریدایرکت میکنید اطلاعات کاربر رو از دیتابیس بگیرید و در یک تگ p به کاربر نشون بدید.
۰۳ فروردین ۱۴۰۱، ۱۸:۳۵
با سلام و وقت یخیر
اگر بخوایم کاربر بعد از ورود به همون صفحه ای که ابتدا بود برگرده چه کدی رو باید قرار بدیم؟
نازنین کریمی مقدم۰۳ فروردین ۱۴۰۱، ۱۹:۴۷
درود
چندتا کامنت پایینتر یه لینک برای چگونگی ریدایرکت به صفحه فعلی دادم. مشکل شما هم دقیقا با همون بخش رفع میشه.
۲۸ آذر ۱۴۰۰، ۱۹:۳۳
سلام خسته نباشید میخواستم بدونم قطعه کدی هست که پس ا ز دریافت اطلاعات کاربر به پنل پرداخت وارد بشه و بعد از پرداخت صحیح وارد صفحه ای جدید و یک کد پیگیری یا رهگیری به کاربر ارائه بده
نازنین کریمی مقدم۲۹ آذر ۱۴۰۰، ۰۵:۳۳
سلام
عملیات کمابیش مشابه با همین مقاله هست منتها باید طرز کار با api درگاه موردنظرتون رو یاد بگیرید و متاسفانه در حال حاضر رو مقالات وبلاگ چنین چیزی رو نداریم.
yesterday۲۷ آذر ۱۳۹۹، ۱۹:۵۷
در سایت شما مانند برخی از سایت ها، در انتهای هر پست «نمایش دیدگاههای بیشتر» وجود دارد که با کلیک روی آن تعداد معینی از دیدگاهها نمایش داده میشود و این امر ادامه مییابد تا تمام دیدگاهها نمایش داده شود.
برای افزودن این قابلیت به سایت از چه کدی میتوان استفاده کرد؟
نازنین کریمی مقدم۰۹ دی ۱۳۹۹، ۱۰:۴۱
درود.
کاری که قصد انجامش رو دارید paging نظرات هست. شما برای این کار راه حلهای مختلفی دارید(استفاده از ajax و یا از پلاگین) در آینده یک مقاله رو برای آموزش مرحله به مرحله اختصاص میدیم. تا اون زمان میتونید<a href="https://wpengine.com/resources/paginate-wordpress/" target="_blank" rel="noopener noreferrer nofollow ugc"> این آموزش انگلیسی</a> رو مطالعه کنید.
yesterday۲۷ آذر ۱۳۹۹، ۱۹:۵۳
با سلام
وقتی کاربر از باکس ورود که در ساید بار سایت قرار میگیرد، وارد سایت میشود، همان صحفه قبل برای رفرش میشود و کاربر واردشده تشخیص داده شده و میتوان به محتوای قفل شده دسترسی یابید.
اما وقتی کاربر از لینک ورودی
http://www.yoursite.com/wp-login.php
که در منو قرار دارد استفاده میکند و وارد سایت میشود، به رفرش شدن صفحه به مانند یا هدایت شدن به آن صفحه ، به پیشخوان وردپرس هدایت میشود.
برای حل مشکل از چه کدی میتوان استفاده کرد؟
با تشکر
نازنین کریمی مقدم۰۹ دی ۱۳۹۹، ۱۰:۲۱
درود.
کاری که قصد دارید انجام بدید ریدایرکت به صفحه فعلی هست و شما با اضافه کردن یک کد php ساده به بخش لاگین به راحتی میتونید این کار رو انجام بدید. کد رو در <a href="https://wordpress.stackexchange.com/questions/309149/remember-page-before-login-page-redirect-to-that-page-after-login" target="_blank" rel="noopener noreferrer nofollow ugc">پاسخهای این لینک</a> میتونید ببینید.
ایران بوی۱۸ مهر ۱۳۹۹، ۱۷:۱۷
سلام خسته نباشید.این کار برای چت روم هم موثر هست وقتی یه دامنه تحریم میشه یا فیلتر بخوام انتقالش بدم به دامنه بعدیم
امیر۱۱ مهر ۱۳۹۹، ۱۲:۱۷
سلام اگر بخوایم قبل موقع پرداخت کاربر به سایت دیگه منتقل بشه و از اون سایت دیگر به درگاه متصب بشه چه کدی باید قرار بدیم
نازنین کریمی مقدم۱۱ مهر ۱۳۹۹، ۱۵:۴۶
سلام.
بحث درگاه بانکی یکم مفصلتر از این حالت هست چون مسائل امنیتی مطرح میشه و درگاههای بانکی خودشون یسری پروتکل خاص دارند.
ممنون که با ما همراه هستید.
حمزه۰۳ تیر ۱۳۹۹، ۱۱:۴۶
عالی بود استاد
من از تابع header استفاده میکردم ارور میداد با اینکه کل اسپیسها و موارد گفته شده رو چک کردم نزدیک 2 روز درگیرش بودم که در نهایت این فانکشن شما بود ک به داد من رسید
مرسی بازم
نازنین کریمی مقدم۱۹ شهریور ۱۳۹۹، ۱۹:۲۲
سلام. خوشحالیم که مقاله براتون مفید بوده.
hhh۳۱ خرداد ۱۳۹۹، ۱۶:۵۶
سلامممنون ازمطالب مفیدی که گزاشتین..من یه جزیی دارم..راهنماییم کنیدممنون میشم
من یه پیغام خطامیخوام برای حذف کاربردرتگ a
البته پیغام دارما.امابراقبل حذف میخوام
فائقه نامور۱۹ مرداد ۱۳۹۹، ۱۷:۰۶
سلام ممنون از توجه شما
موردی که اشاره فرمودید به تیم تولید محتوا انتقال داده میشود
حسین سلیمی۳۰ اردیبهشت ۱۳۹۹، ۲۲:۴۴
عالی بود و خیلیم به جا
فائقه نامور۰۷ خرداد ۱۳۹۹، ۱۱:۳۳
خواهش میکنم
ممنون از توجه شما
علی۰۵ اردیبهشت ۱۳۹۸، ۰۷:۳۶
دستتون درد نکنه
هادی پولادوند۲۶ فروردین ۱۳۹۸، ۲۲:۴۷
درود بر شما..ممنون
Mahmood B۰۸ آذر ۱۳۹۷، ۱۸:۵۹
مطلب خوبی بود سون لرن :)[codeBox]<7learn>
i love you :)
</7learn>[/codeBox]
آرش کریمی۳۰ مرداد ۱۳۹۷، ۲۰:۰۶
میدونم دوست عزیز ، منظورم اینه که چرا گوگل با دامنه اصلی جایگزینش نمیکنه؟!!
خواهشن یکم به عرایض بنده دقت کنید دیگه نمیدونم چطوری منظورمو به شما برسونم
آرش کریمی۳۰ مرداد ۱۳۹۷، ۱۲:۵۸
سلام مجدد
پس چرا در مورد سایتی که گفتم اینطور نیست و دامنه جایگزین نمیشه؟!!
مصطفی قدیمی۳۰ مرداد ۱۳۹۷، ۱۹:۰۰
اون دامنه که داره ریدایرکت میشه دامنه فرعی هستش که به دامنه اصلی ریدایرکت میشه ...
آرش کریمی۳۰ مرداد ۱۳۹۷، ۱۱:۰۵
درود
پس چرا گوگل آدرس دامنه ش رو عوض نمیکنه ؟!
مگه ریدایرکت ۳۰۱ برای این نیست که به گوگل حالی کنیم که آدرس دامنه ما عوض شده؟!
مصطفی قدیمی۳۰ مرداد ۱۳۹۷، ۱۱:۴۹
با سلالم و احترام
بله ریدایرکت 301 تمامی اعتبار سایت رو منتقل میکنه و به گوگل و سایر موتور جستجوگر میگه که این همون مصالب فقط با آدرس جدید و اعتباری که قبلا هم داشته منتقل میشه
آرش کریمی۲۸ مرداد ۱۳۹۷، ۱۴:۳۰
سرکارمون گذاشتی من میگم نمیخوام ریدایرکت 301 انجام بدم میخوام دقیقا مثل این لینک عمل کنم eurocccam.tk این دامنه با اینکه ریدایرکت کرده بخوبی تو گوگل ایندکس شده
مصطفی قدیمی۲۸ مرداد ۱۳۹۷، ۱۶:۵۰
دوست عزیز این ریدایرکت 301 هست من متوجه نمیشم شما چی میگی !
<a href="http://eurocccam.tk" target="_blank" rel="noopener nofollow ugc">http://eurocccam.tk</a>301 Moved Permanently
https://eurocccam.tk
302 Found
<a href="http://eucccam2.xyz/" target="_blank" rel="noopener nofollow ugc">http://eucccam2.xyz/</a>200 OK
شما میتونی با این سایت چک کنی و مطمئن بشی !
<a href="http://www.redirect-checker.org/index.php" target="_blank" rel="noopener nofollow ugc">http://www.redirect-checker.org/index.php</a>
آرش کریمی۲۷ مرداد ۱۳۹۷، ۱۹:۳۶
خب چطوری میتونم استفاده کنم بدون اینکه آدرس دامنه اصلیم ایندکسش از بین نره؟!!
مصطفی قدیمی۲۸ مرداد ۱۳۹۷، ۰۶:۲۰
بهتره از کدهای ریدایرکت 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۱۷ اردیبهشت ۱۳۹۳، ۱۷:۱۲
با سلام
خیلی عالی بود
Tina۱۷ اسفند ۱۳۹۲، ۱۵:۰۳
واقعا ممنونم
N a S e R۱۳ دی ۱۳۹۲، ۰۱:۴۷
عالی بود :?:
حسین محمدی۱۲ دی ۱۳۹۲، ۱۶:۱۵
ممنون استاد...
headers_sent() چیکار میکنه؟؟؟
لقمان آوند۱۲ دی ۱۳۹۲، ۱۷:۳۲
چک میکنه اگه هدر ارسال شده باشه true و در غیر این صورت false رو بر میگردونه
راهنمای مقاله
یک تابع php همه فن حریف برای ریدایرکت و انتقال کاربر در php
راهنما و فهرست مقاله
یک تابع php همه فن حریف برای ریدایرکت و انتقال کاربر در php