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




redirect (22)

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

<?php

session_start();

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

// Page goes here
?>

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

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

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

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


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


इनमें से कई उत्तर सही हैं, लेकिन वे मानते हैं कि आपके पास एक पूर्ण यूआरएल है, जो मामला नहीं हो सकता है। यदि आप एक सापेक्ष यूआरएल का उपयोग करना चाहते हैं और शेष उत्पन्न करना चाहते हैं, तो आप ऐसा कुछ कर सकते हैं ...

$url = 'http://' . $_SERVER['HTTP_HOST'];            // Get the server
$url .= rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); // Get the current directory
$url .= '/your-relative/path-goes/here/';            // <-- Your relative path
header('Location: ' . $url, true, 302);              // Use either 301 or 302

<?php 
header('Location: redirectpage.php');
header('Location: redirectpage.php');exit();
echo "<script>location.href='redirectpage.php';</script>";
?>

यह नियमित और सामान्य PHP रीडायरेक्ट है लेकिन आप कोड के नीचे कुछ सेकंड प्रतीक्षा के साथ एक पृष्ठ को रीडायरेक्ट कर सकते हैं:

<?php
header('refresh:5;url=redirectpage.php '); //Note: here 5 means 5 seconds wait for redirect.
?>

आप रीडायरेक्ट करने के लिए php हेडर फ़ंक्शन का उपयोग करने का प्रयास कर सकते हैं। आप आउटपुट बफर सेट करना चाहते हैं ताकि आपका ब्राउज़र स्क्रीन पर रीडायरेक्ट चेतावनी फेंक न सके।

ob_start();
header("Location: ".$website);
ob_end_flush();

हम दो तरीकों से कर सकते हैं

  1. जब उपयोगकर्ता https://bskud.com/PINCODE/BIHAR/index.php पर आते हैं तो https://bskud.com/PINCODE/BIHAR/index.php पर रीडायरेक्ट https://bskud.com/PINCODE/BIHAR.php

नीचे PHP कोड से

<?php header("Location: https://bskud.com/PINCODE/BIHAR.php"); exit; ?>

https://bskud.com/PINCODE/BIHAR/index.php में कोड ऊपर सेव https://bskud.com/PINCODE/BIHAR/index.php

2. जब कोई शर्त सही होती है तो दूसरे पेज पर रीडायरेक्ट करें

<?php  $myVar = "bskud";   if ($myVar == "bskud") { ?>  <script> window.location.href="https://bskud.com";  </script> <?php  } else {  echo "<b>Check Website Name Again</b>"; } ?>

`


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

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

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

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

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

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


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

 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");

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

    exit();
}

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

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


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

<?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() फ़ंक्शन के उपयोग की अनुशंसा करता हूं।

मूल रूप से

$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


. . . 

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

संदर्भ;


मैंने पहले से ही इस सवाल का जवाब दिया है, लेकिन इस बीच मैं फिर से करूँगा क्योंकि मैंने सीखा है कि यदि आप सीएलआई में चल रहे हैं तो विशेष मामले हैं (रीडायरेक्ट नहीं हो सकते हैं और इस प्रकार exit() नहीं चाहिए) या यदि आपका वेबसर्वर एक (एफ) CGI के रूप में PHP चला रहा है (इसे ठीक से रीडायरेक्ट करने के लिए पहले सेट Status शीर्षलेख की आवश्यकता है)।

function Redirect($url, $code = 302)
{
    if (strncmp('cli', PHP_SAPI, 3) !== 0)
    {
        if (headers_sent() !== true)
        {
            if (strlen(session_id()) > 0) // if using sessions
            {
                session_regenerate_id(true); // avoids session fixation attacks
                session_write_close(); // avoids having sessions lock other requests
            }

            if (strncmp('cgi', PHP_SAPI, 3) === 0)
            {
                header(sprintf('Status: %03u', $code), true, $code);
            }

            header('Location: ' . $url, true, (preg_match('~^30[1237]$~', $code) > 0) ? $code : 302);
        }

        exit();
    }
}

मैंने विभिन्न HTTP पुनर्निर्देशन कोड ( 301 , 302 , 303 और 307 ) का समर्थन करने के मुद्दे को भी संभाला है, क्योंकि इसे मेरे पिछले उत्तर की टिप्पणियों में संबोधित किया गया था, यहां विवरण हैं:

  • 301 - स्थायी रूप से स्थानांतरित हो गया
  • 302 - मिला
  • 303 - अन्य देखें
  • 307 - अस्थायी रीडायरेक्ट (HTTP / 1.1)

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

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

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

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

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


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

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

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

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


<?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()


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 का "स्थान" -हेडर अभी भी HTTP 302- डायरेक्ट कोड का उपयोग करता है, जो कड़ाई से, पुनर्निर्देशन के लिए सबसे अच्छा नहीं है। इसे इसके बजाय उपयोग करना चाहिए, 303 एक है।

डब्ल्यू 3 सी यह उल्लेख करने के लिए काफी दयालु है कि 303-हेडर "कई पूर्व-HTTP / 1.1 उपयोगकर्ता एजेंट" के साथ असंगत है, जो वर्तमान उपयोग में कोई ब्राउज़र नहीं होगा। तो, 302 एक अवशेष है, जिसका उपयोग नहीं किया जाना चाहिए

... या आप इसे अनदेखा कर सकते हैं, हर किसी के रूप में ...


HTTP Location शीर्षलेख भेजने के लिए header() फ़ंक्शन का उपयोग करें:

header('Location: '.$newURL);

कुछ सोचने के विपरीत, die() पास पुनर्निर्देशन के साथ कुछ लेना देना नहीं है। इसका उपयोग केवल तभी करें जब आप सामान्य निष्पादन के बजाय रीडायरेक्ट करना चाहते हैं।

example.php:

<?php 
header('Location: static.html');
$fh = fopen('/tmp/track.txt','a');
fwrite($fh, $_SERVER['REMOTE_ADDR'].' '.date('c')."\n");
fclose($fh);
?>

परिणाम या 3 निष्पादन:

[email protected]:~> cat /tmp/track.txt
127.0.0.1 2009-04-21T09:50:02+02:00
127.0.0.1 2009-04-21T09:50:05+02:00
127.0.0.1 2009-04-21T09:50:08+02:00

फिर से शुरू करना - अनिवार्य die() / exit() कुछ शहरी किंवदंती है, जिसका वास्तविक PHP से कोई लेना देना नहीं है। क्लाइंट "सम्मान" Location: साथ कुछ भी नहीं है Location: हेडर। हेडर भेजना क्लाइंट का उपयोग किए बिना, PHP निष्पादन को रोकता नहीं है।


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) पर रीडायरेक्ट नहीं करेगा।

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


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


यहां दूसरों की तरह कहा गया है, के साथ स्थान शीर्षलेख भेजना:

header( "Location: http://www.mywebsite.com/otherpage.php" );

लेकिन ब्राउज़र पर किसी भी अन्य आउटपुट भेजने से पहले आपको इसे करने की ज़रूरत है।

साथ ही, यदि आप कुछ पृष्ठों से अनधिकृत उपयोगकर्ताओं को अवरुद्ध करने के लिए इसका उपयोग करने जा रहे हैं, जैसा आपने बताया है, तो ध्यान रखें कि कुछ उपयोगकर्ता एजेंट thedailywtf.com/Articles/WellIntentioned-Destruction.aspx और वर्तमान पृष्ठ पर जारी रहेगा, इसलिए आपको मरने की आवश्यकता होगी ( ) भेजने के बाद।





redirect