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


1261

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

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

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


आप PHP में हेडर को अपडेट कर सकते हैं: हेडर
ज़ैक मैरपेज़

11
@ सलाम: साइड नोड के रूप में, किसी भी तरह के रीडायरेक्ट को लागू नहीं करते हैंprotection from unauthorized users ; यह नहीं है कि चीजों को कैसे किया जाना चाहिए?)
स्ट्रै

7
@Strae रीडायरेक्ट वाले पृष्ठों की सुरक्षा में क्या गलत है? तो फिर सबसे अच्छा तरीका क्या है?

6
@PravindaAmarathunga पुनर्निर्देशित तत्वों में से एक है, लेकिन केवल एक ही नहीं है। बस यह सुनिश्चित करें कि संरक्षित तत्व अनधिकृत उपयोगकर्ताओं के लिए बिल्कुल भी आउटपुट न हों; उदाहरण के लिए, ब्राउज़र के रीडायरेक्ट को क्लाइंट-साइड अक्षम किया जा सकता है: यदि ब्राउज़र रीडायरेक्ट नहीं करता है और मूल पृष्ठ सामान्य रूप से आउटपुट हो जाता है, तो उपयोगकर्ता क्या देखेगा? सीएमएस आम तौर पर पुनर्निर्देशित करते हैं और एक संरक्षित संदेश के साथ सामान्य वस्तुओं की जगह, संरक्षित वस्तुओं को प्रिंट नहीं करते हैं।
स्ट्रेट

@PravindaAmarathunga मार्कस के उत्तर से लिंक की जाँच करें: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Strae

जवाबों:


1696

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

1. मूल उत्तर

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

header('Location: '.$newURL);

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

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

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

आप का उपयोग क्यों करना चाहिए die()या exit(): दैनिक डब्ल्यूटीएफ

निरपेक्ष या सापेक्ष URL

जून 2014 के बाद से निरपेक्ष और सापेक्ष URL दोनों का उपयोग किया जा सकता है। RFC 7231 देखें, जिसने पुराने RFC 2616 को बदल दिया था , जहाँ केवल निरपेक्ष URL की अनुमति थी।

स्थिति कोड

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

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

3. प्रलेखन

HTTP हेडर और header()फ़ंक्शन PHP में

4. विकल्प

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

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

5
इस उत्तर के साथ कुछ समस्याएं: 303 "सही" स्थिति कोड नहीं हो सकता है। उदाहरण के लिए, 301 Google के लिए वांछित हो सकता है। दूसरे, header('Location: '.$newURL);ब्राउज़र से पहले किसी भी HTML (या पाठ) को पारित किया जाना चाहिए, या यह सही ढंग से काम नहीं करेगा।
चक ले बट २

6
दैनिक डब्ल्यूटीएफ कहानी एक सामान्य, दुख की बात है। वैसे भी, यह गायब नहीं मरना क्या समस्या का कारण है लेकिन एक बुरा डिजाइन है। 99.9% मामलों में हिंसक तरीके से प्रक्रिया को बंद करना गलत है। एक आम, क्लीनर समाधान (मेरे पसंदीदा वैसे भी नहीं) एक पुनर्निर्देशन अपवाद को फेंकना है और आपको आवेदन प्रविष्टि बिंदु पर पकड़ना है। उसके बाद आप अपने सभी "के बाद" कॉल कर सकते हैं (लॉग / करीबी कनेक्शन / कभी क्या)
robertodecurnex

4
http-equiv="Location"सभी ब्राउज़रों द्वारा समर्थित नहीं है। आपको refreshइसके बजाय उपयोग करना चाहिए ! <meta http-equiv="refresh" content="0;url=http://example.com/">
तिमो ००२

71
कभी भी 301 जारी न करें जब तक कि आप इसका मतलब न निकालें । 301 का अर्थ है स्थायी, और स्थायी का अर्थ है स्थायी , जिसका अर्थ है कि यह उपयोगकर्ता एजेंटों द्वारा कैश किया जाएगा, जिसका अर्थ है लंबे समय तक, कैफीन से भरी रातें, जो आपको लॉग इन करते समय आश्चर्यचकित करती हैं कि क्या आप पागल हैं क्योंकि आपको किसी पृष्ठ को कॉल या अपडेट करना चाहिए था और आप शपथ लेते हैं। भगवान के लिए यह आपकी मशीन पर काम करता है लेकिन ग्राहक का नहीं। यदि आप बिल्कुल 301 पर कॉल करना चाहते हैं, तो संसाधन पर कैश-कंट्रोल अधिकतम आयु डालें। आपके पास असीम ज्ञान नहीं है और आप जैसा चाहते हैं वैसा नहीं होना चाहिए।
मदुमलाओ

2
लेकिन क्या बाहर निकलने पर डाई का उपयोग करने का कोई कारण है? निकास क्लीनर और अधिक उचित लगता है।
ars265

122

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

header('Location: '.$newURL);

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

फ़ाइल उदाहरण। एफपी :

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

तीन निष्पादन के परिणाम:

bart@hal9k:~> 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:हेडर के साथ क्लाइंट का "सम्मान" करने से कोई लेना-देना नहीं है । हेडर भेजना क्लाइंट के इस्तेमाल की परवाह किए बिना PHP निष्पादन को रोक नहीं सकता है।


8
मरो () या बाहर निकलें () उन ग्राहकों के लिए है जो "स्थान: ..." का सम्मान नहीं करते हैं
पंजे

12
@clawr: नहीं, exit()पृष्ठ को शेष सामग्री (प्रतिबंधित पृष्ठों पर विचार करने) को दिखाने से रोकना है। vartec सही है, इसका HTTP स्थान हेडर से कोई लेना-देना नहीं है और आपको इसकी आवश्यकता नहीं है exit। मैंने इसे अपने उत्तर में शामिल करने के लिए चुना क्योंकि, जो कोई साधारण रीडायरेक्ट करना नहीं जानता है , वह व्यक्ति एक सरल और महत्वपूर्ण कदम को लागू न करने के बजाय सुरक्षित खेल सकता है, ताकि वह उन्नत प्रक्रिया का लाभ उठा सके। नियंत्रण।
एलिक्स एक्सल

1
लेकिन हेडर का सम्मान करने वाले ब्राउज़र पृष्ठ को छोड़ देंगे और कनेक्शन को बंद कर देंगे जबकि आपकी स्क्रिप्ट अभी भी निष्पादित हो रही है। यह पूरी तरह से खराब है। PHP कुछ समय के लिए स्क्रिप्ट के साथ आगे बढ़ेगा (यही कारण है कि आपका कोड निष्पादित होता है) लेकिन निष्पादन के बीच में इसे बेतरतीब ढंग से रोक सकता है, जिससे सामान टूट जाता है। Ign_user_abort () को कॉल करने से यह रोका जाएगा, लेकिन ईमानदारी से मैं इसके लायक नहीं हूं। बस अपने HTML लेखन सामग्री के साथ आगे बढ़ें (हालांकि शायद बेकार है) लेकिन एक हेडर ('स्थान:)) के बाद डिस्क या डेटाबेस पर लिखने वाले सामान न करें; यदि संभव हो तो रीडायरेक्ट से पहले डिस्क पर लिखें। [इसके अलावा: url निरपेक्ष होना चाहिए।]
फ्रांसेस्कोएम

क्या ब्राउज़र प्रोटोकॉल का पता लगाने से पहले रीडायरेक्ट करने का कोई तरीका है? कारण मुझे पुनर्निर्देशित करने की आवश्यकता है क्योंकि मुझे मेरे सभी डोमेन के लिए पर्याप्त एसएसएल प्रमाणपत्र नहीं मिल सकता है। मैं .htaccessपुनर्निर्देशित करने के लिए उपयोग करूँगा , लेकिन मुझे किसी तरह से अंतिम डोमेन पर पुनर्निर्देशित डोमेन को पास करने के लिए एक रास्ता चाहिए?
ओल्डबॉय

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

    exit();
}

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

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


6
और आउटपुट बफरिंग मत भूलना या आप 'पहले से ही भेजे गए हेडर' के साथ समाप्त हो जाएंगे।
कुरोकी काज

8
... और न भूल जाओ, जैसे कि "आपको $ n सेकंड में $ nepage पर पुनर्निर्देशित कर दिया जाएगा, यदि $ पुनर्निर्देशित नहीं हुआ तो यहां क्लिक करें" कुछ ब्रूज़र और कुछ ब्राउज़र की सेटिंग, उस रीडायरेक्ट को विफल कर सकती हैं।
स्ट्रेच

3
@DaNieL: इस प्रकार का पुनर्निर्देशन "$ n सेकंड" नहीं होगा। यह तुरंत होगा यदि यह बिल्कुल होता है, और किसी भी अनुरूप ब्राउज़र को इसे संभालना चाहिए। मुझे लगता है कि आप "मेटा रीफ़्रेश" के बारे में सोच रहे हैं, जो लोग तब उपयोग करते हैं जब वे किसी भी बेहतर को नहीं जानते हैं।
rmeador

1
@rmeador ... पुराने ब्राउज़रों और विशेष ब्राउज़रों के लिए। यदि मेटा-रीडायरेक्ट विफल हो जाता है, तो लिंक के साथ आपको पहले अपना स्थान शीर्षलेख करना चाहिए, यदि विफल होने पर "आपको x सेकंड में पृष्ठ पर पुनर्निर्देशित किया जाएगा" के साथ एक मेटा-रीडायरेक्ट होता है। यह अनुप्रेषित करने का उचित और विफल-सुरक्षित तरीका है।
एंड्रयू मूर

3
एंड्रयू: HTTP ब्राउज़र स्थान का सम्मान कैसे नहीं कर सकता है:?
vartec

102

PHP से इको का उपयोग करके आउटपुट जावास्क्रिप्ट, जो काम करेगा।

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

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

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

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


2
सरल और बात के जवाब के लिए! एक साधारण पृष्ठ पुनर्निर्देशन के लिए बढ़िया है!
स्टैथिस एंड्रोनिकोस

और इस तरह आप सामान्य Cannot modify header information - headers already sent byत्रुटि में नहीं चलते हैं ।
काई नैक

1
@ क्या, अगर जावास्क्रिप्ट अक्षम है तो क्या होगा?
इस्तियाक अहमद

@IstiaqueAhmed javascript इन दिनों लगभग हमेशा सक्षम है लेकिन अगर यह अक्षम है तो आप PHP बफर का उपयोग कर सकते हैं। इस एसओ का जवाब है कि। यदि आप PHP बफ़रिंग का उपयोग कर रहे हैं, तो आपको इस विधि की आवश्यकता नहीं है, मुझे पता है।
हम्माद खान

गलत, आप बफरिंग के बिना भी इसे PHP में कर सकते हैं (और करना चाहिए): एक अच्छी तरह से डिज़ाइन किए गए पृष्ठ में, किसी भी HTML सामग्री को उपयोगकर्ता के भेजे जाने से पहले सभी प्रासंगिक PHP प्रसंस्करण होना चाहिए। इस तरह PHP रीडायरेक्ट ठीक काम करेगा।
MestreLion

91

1. हेडर फ़ंक्शन का उपयोग करना 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 प्रतिध्वनि "<script> location.href = ' google.fr/'.</ script>" का उपयोग करता हूं ; ?> यह परीक्षण करने के लिए, और यह वही हुआ जो मैं चाहता था
डॉक्टरडायर हैती

1
दूसरा समाधान जेएस विकलांगों के साथ काम नहीं करेगा।
ताजनगरी

55

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

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

उस महत्वपूर्ण दूसरी पंक्ति को छोड़ने से आप दैनिक डेलीएफ पर समाप्त हो सकते हैं । समस्या यह है कि ब्राउज़रों को उन हेडरों का सम्मान नहीं करना पड़ता है जो आपके पृष्ठ पर वापस आते हैं, इसलिए हेडर को अनदेखा करने के साथ, शेष पृष्ठ को बिना रीडायरेक्ट के निष्पादित किया जाएगा।


1
स्क्रिप्ट को मारने से पहले उपयोगकर्ता को कुछ आउटपुट देने के बारे में क्या है? तुम्हें पता है, लोगों को पता है कि क्या होता है प्यार करता हूँ ...
स्ट्रे

3
आप मान रहे हैं कि स्क्रिप्ट का पुनर्निर्देशन के अलावा कुछ भी नहीं है। जो शायद बिल्कुल भी सच न हो।
vartec

13
@DaNieL: इसे मरने के लिए बदल दें ("मेरे हेडर को अनदेखा करना बंद करें!")
nickf

3
मुझे die();आपके द्वारा दिया गया वह सरल विवरण पसंद आया - यदि आप ऐसा नहीं करते हैं तो उपयोगकर्ता एक पल के लिए पूरा पृष्ठ देख सकता है यदि आप इसका उपयोग करते हैं; उपयोगकर्ता पुनर्निर्देशित किया जाएगा और कोई अस्थायी सामग्री नहीं दिखाई जाएगी + 1
TheBlackBenzKid

हेडर भेजे जाने के बाद उपयोगी गतिविधि होना संभव है, ऐसी गतिविधि जो ब्राउज़र को कुछ नहीं भेजती है, लेकिन गतिविधि को लॉग करती है या रिकॉर्डिंग लेनदेन को पूरा करती है। इस कारण से, मरने / बाहर निकलने की आवश्यकता स्क्रिप्ट पर निर्भर करती है।
DanAllen

28

उपयोग:

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

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

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

आप बाहरी पृष्ठों पर भी अनुप्रेषित कर सकते हैं, जैसे:

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

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


25

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

<?php
    session_start();

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

    // Page goes here
?>

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

हाल ही में, मुझे साइबर हमले हुए और निर्णय लिया गया, मुझे उन उपयोगकर्ताओं को जानने की जरूरत है जो एडमिन पैनल या वेब एप्लिकेशन के आरक्षित हिस्से तक पहुंचने की कोशिश कर रहे हैं।

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


19

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

$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

16

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


क्या ब्राउज़र प्रोटोकॉल का पता लगाने से पहले रीडायरेक्ट करने का कोई तरीका है? कारण मुझे पुनर्निर्देशित करने की आवश्यकता है क्योंकि मुझे मेरे सभी डोमेन के लिए पर्याप्त एसएसएल प्रमाणपत्र नहीं मिल सकता है। मैं .htaccessपुनर्निर्देशित करने के लिए उपयोग करूँगा , लेकिन मुझे किसी तरह से अंतिम डोमेन पर पुनर्निर्देशित डोमेन को पास करने के लिए एक रास्ता चाहिए?
ओल्डबॉय

16

निम्नलिखित कोड का उपयोग करें:

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

14

मैंने पहले ही इस सवाल का जवाब दे दिया है, लेकिन मैं इसे फिर से करूंगा क्योंकि इस बीच मुझे पता चला है कि विशेष मामले हैं यदि आप सीएलआई में चल रहे हैं (पुनर्निर्देशन नहीं हो सकता है और इस तरह नहीं होना चाहिए exit()) या यदि आपका वेबसर्वर है PHP को एक (F) CGI के रूप में चलाना (इसे 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)

11

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

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

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

रिश्तेदार / निरपेक्ष पथ

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

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

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

<?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 में पहला URL टाइप करते हैं, तो आप स्वचालित रूप से दूसरे, पुनर्निर्देशित लिंक पर पुनर्निर्देशित हो जाएंगे।

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

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

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

क्यों (दूसरे पैराग्राफ के अंत के पास)? क्या आप &paraइसके बजाय (ताकि पूरा पढ़ता है mypage.php?param1=val1&param2=val2)) मतलब है ? (एचटीएमएल इकाई पैरा ) "a" है - शायद कुछ बाहरी कार्यक्रम ने रूपांतरण किया था?)।
पीटर मोर्टेंसन

9

उपयोग:

<?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.
?>

7

अर्थ वेब की पूर्व संध्या में, शुद्धता पर विचार करने के लिए कुछ है। दुर्भाग्य से, PHP का "लोकेशन" -हीडर अभी भी HTTP 302 -डायरेक्ट कोड का उपयोग करता है , जो, सख्ती से, अप्रत्यक्ष के लिए सबसे अच्छा नहीं है। इसके बजाय इसका उपयोग करना चाहिए, 303 एक है।

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

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


7

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

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


जावास्क्रिप्ट क्लाइंट पर चलता है जो आप देख रहे हैं या नहीं हो सकता है।
छुरी

7

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

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

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

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


6

यहां अन्य लोगों की तरह, ने लोकेशन हेडर भेजकर कहा:

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

ब्राउज़र में कोई अन्य आउटपुट भेजने से पहले आपको इसे करने की आवश्यकता है।

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


but you need to do it before you've sent any other output to the browser. बहुत बढ़िया!! मैं हेडर पहले से ही भेजी त्रुटि प्राप्त क्यों कर रहा था पर मिनट के लिए खोज रहा। +1 !!
जोश

अधिक सामान्य, आपके पास अपनी स्क्रिप्ट पूरी तरह से / बंद है। die()ऐसा करने का सिर्फ एक तरीका है।
MauganRa

6

यहाँ मेरे विचार हैं:

IMHO, आने वाले अनुरोध को पुनर्निर्देशित करने का सबसे अच्छा तरीका स्थान हेडर का उपयोग करके होगा, जो जाता है

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

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

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

इसलिए यह वेबसाइट की एसईओ सेटिंग्स को प्रभावित करेगा।


1
बाहर निकलने () का उपयोग हेडर के तुरंत बाद किया जाना चाहिए ()
EKanadily

@docesam .. सहमत .. बाहर () हेडर () कॉल के तुरंत बाद कॉल किया जाना चाहिए। हालाँकि मुझे लगता है, अगर इस हेडर () स्टेटमेंट, एक्ज़िट () के बाद ब्राउज़र में कोई और आउटपुट नहीं आ सकता है, तो ज़रूरी नहीं है - बस मेरी राय
भास्कर प्रमाण

हां, लेकिन आपको यह समझाना होगा कि क्योंकि कोई आपकी स्क्रिप्ट के लिए अपनी लाइन की कोड कॉपी कर सकता है और यह संभावित रूप से लंबे समय तक खुद के चारों ओर चक्कर लगाने का कारण बन सकता है जो गलत हो गया है।
EKanadily

1
@BhaskarPramanik कल्पना कीजिए कि आपको जल्दी से एक दरवाज़ा बंद करना है, लेकिन फिर आपको यह सुनिश्चित करने के लिए उन्हें फिर से खींचना / धकेलना / तोड़ना होगा कि क्या यह पहले से ही बंद है या नहीं ..
aswzen

5

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) पर पुनर्निर्देशित नहीं होगा।


पहले से ही एक जवाब है कि 1085 है जिसमें आपके द्वारा प्रदान की गई जानकारी शामिल है, साथ ही बहुत अधिक।
पैट्रिक हंड

5

हां, PHP का उपयोग करना संभव है। हम दूसरे पेज पर रीडायरेक्ट करेंगे।

निम्नलिखित कोड का प्रयास करें:

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

4

1. उपयोग करना header, एक अंतर्निहित PHP फ़ंक्शन

क) मापदंडों के बिना सरल पुनर्निर्देशित

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

बी) जीईटी मापदंडों के साथ पुनर्निर्देशित

<?php
      $id = 2;
      header("Location: index.php?id=$id&msg=succesfully redirect");
  ?>

2. PHP में जावास्क्रिप्ट के साथ पुनर्निर्देशित

क) मापदंडों के बिना सरल पुनर्निर्देशित

<?php
     echo "<script>location.href='index.php';</script>";
 ?>

बी) जीईटी मापदंडों के साथ पुनर्निर्देशित

<?php
     $id = 2;
     echo "<script>location.href='index.php?id=$id&msg=succesfully redirect';</script>";
   ?>

जावास्क्रिप्ट बिट किसी तरह केवल एक चीज थी जो साइट के अंतिम होस्टिंग में काम कर रही थी; मेरा मानना ​​है कि यह कैशिंग की बात है लेकिन इसके साथ ही मैंने इसे तुरंत हल कर दिया है।
cdsaenz

3

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

  1. जब उपयोगकर्ता 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 पर सहेजें

  2. जब कोई भी स्थिति सत्य होती है तो दूसरे पृष्ठ पर पुनः निर्देशित किया जाता है:

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

यह क्या है? कृपया अपनी खुद की वेबसाइट के लिंक का उपयोग न करें। और दूसरा उदाहरण जावास्क्रिप्ट रीडायरेक्ट का उपयोग करता है, न कि PHP header()फ़ंक्शन का।
स्क्रिप्टमैन

2

उपयोग:

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

1
क्या आप अपने कोड के कार्य की व्याख्या कर सकते हैं? आपका उत्तर इसकी लंबाई और सामग्री के कारण चिह्नित किया गया था।
www139

2

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

मूल रूप से

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

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

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

तो, मान लीजिए कि आपने एक सत्र नामक सत्र में उपयोगकर्ता के प्राधिकरण स्तर को संग्रहीत किया है 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

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 5
    authRedirect($_SESSION[‘u_auth’], 5);

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 4
    authRedirect($_SESSION[‘u_auth’], 4);

    // Redirects to www.someotherplace.com/somepage.php if the
    // user isn’t authentication level 2
    authRedirect($_SESSION[‘u_auth’], 2, www.someotherplace.com/somepage.php”);

    . . .

संदर्भ;


2

मुझे समय के साथ पुनर्निर्देशन पसंद है।

<?php

header("Refresh: 5;url=índex.php");

2

रूटिंग के लिए हेडर फ़ंक्शन का उपयोग करना

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

मान लीजिए कि हमारे से रूट करना चाहते A.php करने के लिए फ़ाइल B.php से हम की मदद लेने के लिए है <button>या <a>। एक उदाहरण देखते हैं

<?php
if(isset($_GET['go_to_page_b'])) {
    header('Location: B.php');
    exit();

}
?>

<p>I am page A</p>
<button name='go_to_page_b'>Page B</button>

B.php

<p> I am Page B</p>

क्या आप सटीक समाधान या अच्छा प्रदान कर सकते हैं?
मेहेदी अब्दुल्ला

पहले से ही बहुत सारे समाधान हैं। आपके समाधान में PHP टैग्स के बिना HTML और PHP को मिलाया गया है। दूसरे आप html कोड प्रिंट करने के बाद हेडर भेजते हैं, तो यह काम नहीं करेगा। और उदाहरण फ़ाइलों का नाम खराब हैं। आपको उनका नाम एफ़पी और बीपीपी नहीं रखना चाहिए। मुझे पता है कि यह केवल उदाहरण है, लेकिन फिर भी आपको नामकरण सम्मेलन की परवाह करनी चाहिए।
ताजनगरी

1

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

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

1

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.