گاهی لازم است تا کاربر به دلایل مختلف، صفحهای متفاوت با آنچه را که درخواست کرده مشاهده کند
مثلا هنگامی که میخواهد به یکی از صفحات داخلی دسترسی پیدا کند در حالی که این اجازه را ندارد یا هنگامی که اطلاعات ورود را به درستی وارد کرده است و باید به صفحهی اصلی سایت هدایت شود.
تغییر مسیر یا Redirect از روشهای مختلفی امکانپذیر است. در این نوشته به تغییر مسیر از طریق سرآمد پاسخ( header ) میپردازیم و از روشهای موجود در HTML و JavaScript چشمپوشی میکنیم.
تغییر مسیر کاربر در php با استفاده از دستور زیر امکانپذیر است:
header( "Location: http://example.com" ); |
هرچند مطابق استاندارد، تعیین مسیر کامل صفحهی هدف الزامی است، با این حال مرورگرها از نشانیهای مرتبط یا Relative هم پشتیبانی میکنند.
وضعیتهای مختلفی در هنگام تغییر مسیر وجود دارند که میتوانند به مرورگر و موتورهای جستجو، اطلاعاتی تکمیلی ارائه دهند.
در php این کد وضعیت از دو روش قابل ارسال است.
روش اول فراخوانی دستور header برای بازنویسی Status:
header( "Status: 300 Multiple Choices" ); header( "Location: http://example.com" ); |
و روش دوم: استفاده از پارامتر سوم دستور header برای تعیین وضعیت:
header( 'Location: temp.html', true, 300 ); |
مهمترین وضعیتهای تعریف شده برای تغییر مسیر عددهای 300، 301، 302، 303، 307 و 308 هستند که شرح آن را در ادامه مشاهده خواهید کرد.
- 300 Multiple Choices: هنگامی مورد استفاده قرار میگیرد که صفحهی مقصد حاوی اطلاعاتی مرتبط با صفحهی فعلی است. یا اطلاعات صفحهی فعلی را به شکلی دیگر ارائه میدهد. مثلا فرمت فایل صوتی را تغییر میدهد
- 301 Moved Permanently: این صفحه به صورت دائم منتقل شده است. مرورگر و موتورهای جستجو ممکن است دیگر صفحهی اصلی را درخواست ندهند
- 302 Found: صفحهی فعلی به صورت موقت به نشانی جدید منتقل میشود. مرورگرها ممکن است تا مدتی نشانی قبلی را درخواست ندهند. این وضعیت در php پیشفرض است
- 303 See Other: همانند وضعیت قبلی، با این تفاوت که مرورگرها تغییر مسیر را در Cache ذخیره نمیکنند و هربار درخواست به صفحهی قبلی ارسال میشود. به علاوه درخواست جدید بدون توجه به نوع درخواست اصلی، در حالت GET ارسال میشود
- 307 Temporary Redirect: تغییر مسیر موقت، با این تفاوت که درخواست از هر نوعی که باشد، با همان نوع در نشانی جدید تکرار میشود. مثلا اطلاعات ارسالی ورود کاربر، به همان صورت به نشانی جدید هدایت خواهند شد
- 308 Permanent Redirect: تغییر مسیر دائمی و با نکتهی گفته شده در وضعیت ۳۰۷. یعنی درخواست ارسالی به صفحهی جدید، با همان نوع و اطلاعات درخواست اصلی خواهد بود
استفاده از وضعیت مناسب در هنگام تغییر مسیر میتواند در رتبهی صفحات شما در موتورهای جستجو( SEO ) و همچنین عملکرد صحیح آن در مرورگرهای مختلف اثربخش باشد، به علاوه میتواند انجام برخی کارها را سادهتر کند.
منبع: ویکیپدیا و راهنمای php
سلام
من بعد از ریدایرکت در لاگ های سایت به این پیام برخورد کردم
Server cannot set status after HTTP headers have been sent.
باید چیکار کنم
این هم خوندم اما جواب نگرفتم
http://stackoverflow.com/questions/29709477/server-cannot-set-status-after-http-headers-have-been-sent-web-api-cors
با سلام
به احتمال زیاد در کدهایی که نوشتید، قبل از اینکه دستور Redirect را به مرورگر ارسال کنید، محتوای سایت شما ایجاد شده است
دستوراتی که Header را تغییر میدهند باید قبل از ایجاد محتوا فراخوانی شوند