💻 بهترین فرصت یادگیری برنامه‌نویسی قبل از افزایش قیمت در آذرماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۵۷ دیدگاه نظر لقمان آوند
ریدایرکت در php : کد کامل انتقال به صفحه دیگر در php
ریدایرکت در 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 پرداختیم، اگر در این مورد سوال یا نظری داشتید، خوشحال می‌شویم که در بخش نظرات آن را با ما و کاربران سون لرن به اشتراک بگذارید.
۵۷ دیدگاه
ما همه سوالات و دیدگاه‌ها رو می‌خونیم و پاسخ میدیم
۳۰ شهریور ۱۴۰۱، ۱۲:۰۲

سلام چطور باید تشخیص بدیم که این کاربر کیست با 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]&lt;7learn&gt; i love you :) &lt;/7learn&gt;[/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
اشتراک گذاری مقاله در :