PHP में रीडायरेक्ट कैसे करें?




redirect (18)

क्या PHP के उपयोग के माध्यम से किसी उपयोगकर्ता को किसी भिन्न पृष्ठ पर रीडायरेक्ट करना संभव है?

मान लें कि उपयोगकर्ता www.example.com/page.php जाता है और मैं उन्हें www.example.com/index.php पर रीडायरेक्ट करना चाहता हूं, मेटा रीफ्रेश के उपयोग के बिना मैं ऐसा कैसे करूं? मुमकिन?

यह अनधिकृत उपयोगकर्ताओं से भी मेरे पृष्ठों को सुरक्षित रख सकता है।


1. exit() साथ हेडर फ़ंक्शन का उपयोग करना exit()

<?php 
     header('Location: target-page.php');
     exit();
?>

लेकिन यदि आप हेडर फ़ंक्शन का उपयोग करते हैं तो कुछ बार आपको हेडर भेजने से पहले गूंज या मुद्रित करने के लिए "पहले से ही हेडर की तरह चेतावनी" प्राप्त हो जाएगी या आप हेडर फ़ंक्शन के बाद die() या exit() उपयोग कर सकते हैं।

2. हेडर के बिना

<?php 
    echo "<script>location.href='target-page.php';</script>";
?>

यहां आपको किसी भी समस्या का सामना नहीं करना पड़ेगा

3. ob_start() और ob_end_flush() साथ हेडर फ़ंक्शन का उपयोग करना

<?php
ob_start(); //this should be first line of your page
header('Location: target-page.php');
ob_end_flush(); //this should be last line of your page
?>

PHP के साथ रीडायरेक्ट करने का सबसे अच्छा तरीका निम्न कोड है ...

 header("Location: /index.php");

सुनिश्चित करें कि कोई कोड काम नहीं करेगा

header("Location: /index.php");

उपरोक्त पंक्ति से पहले सभी कोड निष्पादित किए जाने चाहिए।

मान लीजिए,

मामला एक:

echo "I am a web developer";
header("Location: /index.php");

यह स्थान (index.php) पर ठीक से रीडायरेक्ट करेगा।

प्रकरण 2:

return $something;
header("Location: /index.php");

उपरोक्त कोड स्थान (index.php) पर रीडायरेक्ट नहीं करेगा।

उम्मीद है, यह स्पष्ट है।


आप नीचे कुछ जावा स्क्रिप्ट विधियों का उपयोग कर सकते हैं

 1)self.location="http://www.example.com/index.php";

 2)window.location.href="http://www.example.com/index.php";

 3)document.location.href = 'http://www.example.com/index.php';  

 4)window.location.replace("http://www.example.com/index.php");

आप पृष्ठों तक पहुंच नियंत्रित करने और मान्य उपयोगकर्ताओं को अधिकृत करने के लिए सत्र चर का उपयोग कर सकते हैं।

<?php

session_start();

if ( !isset( $_SESSION["valid_user"]) )
{
    header("location:../index");
}

// Page goes here
?>

http://php.net/manual/en/reserved.variables.session.php


आप हेडर को php: header में अपडेट कर सकते हैं


इनमें से अधिकतर जवाब एक बहुत ही महत्वपूर्ण कदम भूल रहे हैं!

header("Location: myOtherPage.php");
die();

उस महत्वपूर्ण दूसरी लाइन को छोड़कर आप thedailywtf.com/Articles/WellIntentioned-Destruction.aspx पर समाप्त हो सकते हैं। समस्या यह है कि ब्राउज़र को आपके पृष्ठ पर वापस आने वाले शीर्षकों का सम्मान नहीं करना पड़ता है, इसलिए हेडर को अनदेखा किया जा रहा है, शेष पृष्ठ को रीडायरेक्ट के बिना निष्पादित किया जाएगा।


ऐसा करने के कई तरीके हैं, लेकिन यदि आप php पसंद करेंगे, तो मैं header() फ़ंक्शन के उपयोग की अनुशंसा करता हूं।

मूल रूप से

$your_target_url = “www.example.com/index.php”;
header(“Location : $your_target_url”);
exit();

यदि आप इसे एक पायदान पर लात मारना चाहते हैं, तो इसे फ़ंक्शंस में उपयोग करना सबसे अच्छा है, इस तरह, आप इसमें प्रमाणीकरण और अन्य जांच elemnts जोड़ने में सक्षम हैं।

आइए उपयोगकर्ता के स्तर की जांच करके प्रयास करें।

इसलिए, मान लें कि आपने u_auth नामक सत्र में उपयोगकर्ता के अधिकार स्तर को संग्रहीत किया है।

function.php

<?php

function authRedirect($get_auth_level, $required_level, $if_fail_link = “www.example.com/index.php”){
    if($get_auth_level != $required_level){
        header(location : $if_fail_link);
        return false;
        exit();
    }else{
        return true;
    }
 }

 . . . 

फिर आप प्रत्येक पृष्ठ के लिए फ़ंक्शन को कॉल करेंगे जिसे आप प्रमाणीकृत करना चाहते हैं।

page.php या किसी अन्य पेज की तरह।

<?php

// page.php

require “function.php”

authRedirect($_SESSION[‘u_auth’], 5);  // redirects to www.example.com/index.php if the user isn’t auth level 5
authRedirect($_SESSION[‘u_auth’], 4);  // redirects to www.example.com/index.php if the user isn’t auth level 4
authRedirect($_SESSION[‘u_auth’], 2, “www.someotherplace.com/somepage.php”);  // redirects to www.someotherplace.com/somepage.php if the user isn’t auth level 2


. . . 

मुझे आशा है कि आपको कुछ सामग्री उपयोगी लगेगी

संदर्भ;


गूंज का उपयोग कर PHP से आउटपुट जावास्क्रिप्ट, जो नौकरी करेगा।

echo '<script type="text/javascript">
           window.location = "http://www.google.com/"
      </script>';

आप PHP में वास्तव में ऐसा नहीं कर सकते हैं जब तक कि आप पृष्ठ आउटपुट को बफर नहीं करते हैं और फिर बाद में रीडायरेक्ट स्थिति की जांच करते हैं। यह एक परेशानी का बहुत अधिक हो सकता है। याद रखें कि शीर्षलेख पृष्ठ से भेजे गए पहले आइटम हैं। आमतौर पर पृष्ठ में अधिकांश रीडायरेक्ट की आवश्यकता होती है। इसके लिए आपको पृष्ठ के सभी आउटपुट को बफर करना होगा और बाद में रीडायरेक्ट स्थिति की जांच करनी होगी। उस बिंदु पर आप या तो पृष्ठ उपयोगकर्ता शीर्षलेख () को रीडायरेक्ट कर सकते हैं या बस buffered आउटपुट गूंज सकते हैं।

बफरिंग (फायदे) के बारे में अधिक जानकारी के लिए

आउटपुट बफरिंग क्या है?


मौजूदा उत्तरों का सारांश और मेरे अपने दो सेंट:

1. मूल जवाब

आप एक नया HTTP शीर्षलेख भेजने के लिए header() फ़ंक्शन का उपयोग कर सकते हैं, लेकिन इसे HTML या टेक्स्ट से पहले ब्राउज़र में भेजा जाना चाहिए (उदाहरण के लिए <!DOCTYPE ...> घोषणा, उदाहरण के लिए)।

header('Location: '.$newURL);

2. महत्वपूर्ण विवरण

मरें () या बाहर निकलें ()

header("Location: http://example.com/myOtherPage.php");
die();

आपको die() या exit() उपयोग क्यों करना चाहिए exit() : thedailywtf.com/Articles/WellIntentioned-Destruction.aspx

पूर्ण यूआरएल

यूआरएल एक पूर्ण होना चाहिए। आरएफसी 2616 देखें। लेकिन ज्यादातर मामलों में एक सापेक्ष यूआरएल भी स्वीकार किया जाएगा।

स्थिति कोड

PHP का "स्थान" -हेडर अभी भी HTTP 302- डायरेक्ट कोड का उपयोग करता है, लेकिन यह वह नहीं है जिसका आपको उपयोग करना चाहिए। आपको या तो 301 (स्थायी रीडायरेक्ट) या 303 (अन्य) पर विचार करना चाहिए।

नोट: डब्ल्यू 3 सी का उल्लेख है कि 303-हेडर "कई पूर्व-HTTP / 1.1 उपयोगकर्ता एजेंटों के साथ असंगत है। वर्तमान में उपयोग किए गए ब्राउज़र सभी HTTP / 1.1 उपयोगकर्ता एजेंट हैं। यह स्पाइडर और रोबोट जैसे कई अन्य उपयोगकर्ता एजेंटों के लिए सच नहीं है।

3. दस्तावेज़ीकरण

PHP में HTTP शीर्षलेख और header() फ़ंक्शन

4. विकल्प

आप http_redirect($url); की वैकल्पिक विधि का उपयोग कर सकते हैं http_redirect($url); जिसे पीईसीएल पैकेज पेक्ल स्थापित करने की आवश्यकता है।

5. सहायक कार्य

इस फ़ंक्शन में 303 स्टेटस कोड शामिल नहीं है:

function Redirect($url, $permanent = false)
{
    header('Location: ' . $url, true, $permanent ? 301 : 302);

    exit();
}

Redirect('http://example.com/', false);

यह अधिक लचीला है:

function redirect($url, $statusCode = 303)
{
   header('Location: ' . $url, true, $statusCode);
   die();
}

6. कामकाज

जैसा कि बताया गया header() कुछ भी लिखने से पहले ही काम करता है। अगर वे HTML आउटपुट में शामिल होते हैं तो वे आमतौर पर विफल हो जाते हैं। फिर आप एक HTML शीर्षलेख वर्कअराउंड (बहुत पेशेवर नहीं!) का उपयोग कर सकते हैं जैसे:

 <meta http-equiv="refresh" content="0;url=finalpage.html">

या एक जावास्क्रिप्ट भी पुनर्निर्देशित।

window.location.replace("http://example.com/");

यदि आप अपाचे पर चल रहे हैं तो आप रीडायरेक्ट के लिए .htaccess का भी उपयोग कर सकते हैं।

Redirect 301 / http://new-site.com/

विज़िटर को किसी अन्य पृष्ठ पर रीडायरेक्ट करने के लिए (विशेष रूप से एक सशर्त पाश में उपयोगी), बस निम्न कोड का उपयोग करें:

<?php 
header('Location: mypage.php'); 
?>

इस मामले में, mypage.php उस पृष्ठ का पता है जिस पर आप आगंतुकों को रीडायरेक्ट करना चाहते हैं। यह पता पूर्ण हो सकता है और इसमें इस प्रारूप में पैरामीटर भी शामिल हो सकते हैं: mypage.php?param1=val1¶m2=val2)

सापेक्ष / पूर्ण पथ

सापेक्ष या पूर्ण पथ से निपटने पर, सर्वर की रूट (DOCUMENT_ROOT) से एक पूर्ण पथ चुनना आदर्श है। निम्नलिखित प्रारूप का प्रयोग करें:

<?php 
header('Location: /directory/mypage.php'); 
?>

यदि कभी भी लक्षित पृष्ठ किसी अन्य सर्वर पर है, तो आप पूर्ण यूआरएल शामिल करते हैं:

<?php 
header('Location: http://www.ccm.net/forum/'); 
?> 

HTTP शीर्षलेख

HTTP प्रोटोकॉल के अनुसार, HTTP शीर्षलेख किसी भी प्रकार की सामग्री before भेजा जाना चाहिए। इसका मतलब है कि शीर्षलेख से पहले कभी भी कोई अक्षर नहीं भेजा जाना चाहिए - यहां तक ​​कि खाली स्थान भी नहीं!

अस्थायी / स्थायी पुनर्निर्देशन

डिफ़ॉल्ट रूप से, ऊपर प्रस्तुत पुनर्निर्देशन का प्रकार एक अस्थायी है। इसका मतलब यह है कि Google जैसे खोज इंजन, इंडेक्सिंग करते समय रीडायरेक्शन को खाते में नहीं ले पाएंगे।

यदि आप खोज इंजन को सूचित करना चाहते हैं कि एक पृष्ठ स्थायी रूप से दूसरे स्थान पर ले जाया गया है, तो निम्न कोड का उपयोग करें:

<? 
header('Status: 301 Moved Permanently', false, 301); 
header('Location: new_address'); 
?>

उदाहरण के लिए, इस पृष्ठ में निम्नलिखित कोड है:

<? 
header('Status: 301 Moved Permanently', false, 301); 
header('Location: /pc/imprimante.php3'); 
exit(); 
?>

जब आप उपरोक्त लिंक पर क्लिक करते हैं, तो आप स्वचालित रूप से इस पृष्ठ पर रीडायरेक्ट हो जाते हैं। इसके अलावा, यह एक स्थायी पुनर्निर्देशन है (स्थिति: 301 स्थायी रूप से हटाया गया)। इसलिए, यदि आप Google में पहला यूआरएल टाइप करते हैं, तो आपको स्वचालित रूप से दूसरे, रीडायरेक्ट लिंक पर रीडायरेक्ट कर दिया जाएगा।

PHP कोड की व्याख्या

शीर्षलेख () के बाद स्थित PHP कोड सर्वर द्वारा व्याख्या किया जाएगा, भले ही विज़िटर पुनर्निर्देशन में निर्दिष्ट पते पर जाता है। ज्यादातर मामलों में, इसका मतलब है कि सर्वर के लोड को कम करने के लिए आपको exit() फ़ंक्शन के header() फ़ंक्शन का पालन करने के लिए एक विधि की आवश्यकता है:

<? 
header('Status: 301 Moved Permanently', false, 301); 
header('Location: address'); 
exit(); 
?>

शायद इस जवाब देने में बहुत देर हो चुकी है। फिर भी, मेरे विचार यहां हैं:

आईएमएचओ, आने वाले अनुरोध को फिर से निर्देशित करने का सबसे अच्छा तरीका स्थान शीर्षलेखों का उपयोग करके होगा, जो जाता है

<?php
header("Location: /index.php");
?>

एक बार यह कथन निष्पादित हो जाने के बाद, और आउटपुट भेजा गया, ब्राउज़र उपयोगकर्ता को फिर से निर्देशित करना शुरू कर देगा। हालांकि, सुनिश्चित करें कि हेडर भेजने से पहले कोई आउटपुट (कोई गूंज / var_dump) नहीं है, अन्यथा यह त्रुटियों का कारण बन जाएगा।

यद्यपि यह मूल रूप से पूछे जाने वाले कार्यों को प्राप्त करने का एक त्वरित और गंदा तरीका है, फिर भी यह अंततः एक एसईओ आपदा बन जाएगा, क्योंकि इस प्रकार के पुनः-निर्देश को हमेशा 301/302 पुनः-प्रत्यक्ष के रूप में व्याख्या किया जाता है, इसलिए खोज इंजन हमेशा अपने इंडेक्स पेज को पुनः निर्देशित पृष्ठ के रूप में देखें, और लैंडिंग पृष्ठ / मुख्य पृष्ठ में से कुछ नहीं। इसलिए यह वेबसाइट की एसईओ सेटिंग्स को प्रभावित करेगा।


हां PHP का उपयोग करना संभव है, हम दूसरे पृष्ठ पर रीडायरेक्ट करेंगे, इसे आजमाएं:

<?php
header("location:./");//redirect to index file
header("location:index.php");//redirect to index file
header("location:example.php");
?>

हां, आप header() फ़ंक्शन का उपयोग कर सकते हैं,

header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
exit();

और कोड निष्पादन से बचने के लिए header() फ़ंक्शन के ठीक बाद exit() फ़ंक्शन को कॉल करना सबसे अच्छा अभ्यास है।

प्रलेखन के अनुसार, किसी वास्तविक आउटपुट को भेजने से पहले header() को कॉल किया जाना चाहिए।


header( 'Location: http://www.yoursite.com/new_page.html' );


<?php
$url = "targetpage"
Function redirect$url(){
   If (headers_sent()) == false{
      Echo '<script>window.location.href="' . $url . '";</script>';
}}
?>

<?php header('Location: another-php-file.php'); exit(); ?>

या यदि आपने पहले से ही PHP टैग खोले हैं, तो इसका उपयोग करें:

header('Location: another-php-file.php'); exit();

आप बाहरी पृष्ठों पर भी रीडायरेक्ट कर सकते हैं, उदाहरण के लिए:

header('Location: https://www.google.com'); exit();

सुनिश्चित करें कि आप exit() या include die()


function Redirect($url, $permanent = false)
{
    if (headers_sent() === false)
    {
        header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
    }

    exit();
}

Redirect('http://www.google.com/', false);

मरने के लिए मत भूलना () / निकास ()!





redirect