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

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

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

 

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

yesterday

در سایت شما مانند برخی از سایت ها، در انتهای هر پست «نمایش دیدگاه های بیشتر» وجود دارد که با کلیک روی آن تعداد معینی از دیدگاه ها نمایش داده می شود و این امر ادامه می یابد تا تمام دیدگاه ها نمایش داده شود.
برای افزودن این قابلیت به سایت از چه کدی می توان استفاده کرد؟

نازنین کریمی مقدم

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

yesterday

با سلام
وقتی کاربر از باکس ورود که در ساید بار سایت قرار می گیرد، وارد سایت می شود، همان صحفه قبل برای رفرش می شود و کاربر واردشده تشخیص داده شده و می توان به محتوای قفل شده دسترسی یابید.
اما وقتی کاربر از لینک ورودی
http://www.yoursite.com/wp-login.php
که در منو قرار دارد استفاده می کند و وارد سایت می شود، به رفرش شدن صفحه به مانند یا هدایت شدن به آن صفحه ، به پیشخوان وردپرس هدایت می شود.
برای حل مشکل از چه کدی می توان استفاده کرد؟
با تشکر

نازنین کریمی مقدم

درود.
کاری که قصد دارید انجام بدید ریدایرکت به صفحه فعلی هست و شما با اضافه کردن یک کد php ساده به بخش لاگین به راحتی میتونید این کار رو انجام بدید. کد رو در پاسخهای این لینک میتونید ببینید.

ایران بوی

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

امیر

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

نازنین کریمی مقدم

سلام.
بحث درگاه بانکی یکم مفصل تر از این حالت هست چون مسائل امنیتی مطرح میشه و درگاه های بانکی خودشون یسری پروتکل خاص دارند.
توصیه میکنم آموزش درگاه پرداخت اینترنتی رو تهیه کنید که در دو بخش ارائه شده.
ممنون که با ما همراه هستید.

حمزه

عالی بود استاد
من از تابع header استفاده میکردم ارور میداد با اینکه کل اسپیس ها و موارد گفته شده رو چک کردم نزدیک 2 روز درگیرش بودم که در نهایت این فانکشن شما بود ک به داد من رسید
مرسی بازم

نازنین کریمی مقدم

سلام. خوشحالیم که مقاله براتون مفید بوده.

hhh

سلامممنون ازمطالب مفیدی که گزاشتین..من یه جزیی دارم..راهنماییم کنیدممنون میشم
من یه پیغام خطامیخوام برای حذف کاربردرتگ a
البته پیغام دارما.امابراقبل حذف میخوام

فائقه نامور

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

حسین سلیمی

عالی بود و خیلیم به جا

فائقه نامور

خواهش می کنم
ممنون از توجه شما

علی

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

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

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

Mahmood B

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

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

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

آرش کریمی

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

مصطفی قدیمی

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

مصطفی قدیمی

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

ما در سون لرن با محدودسازی دسترسی آزاد به اینترنت مخالفیم     اطلاعات بیشتر