index - php redirect without header




Wie man eine Umleitung in PHP macht? (18)

Ist es möglich, einen Benutzer durch die Verwendung von PHP auf eine andere Seite umzuleiten?

www.example.com/index.php wir an, der Benutzer geht zu www.example.com/page.php und ich möchte sie auf www.example.com/index.php umleiten, wie würde ich dies tun, ohne eine Meta-Aktualisierung zu verwenden? Möglich?

Dies könnte sogar meine Seiten vor unautorisierten Benutzern schützen.


1. Verwendung der Header-Funktion mit exit()

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

Aber wenn Sie Header-Funktion verwenden, erhalten Sie einige Male "Warnung wie Header bereits senden" , um zu beheben, dass nicht Echo oder Drucken vor dem Senden von Headern oder Sie können einfach die() oder exit() nach Header-Funktion.

2. Ohne Überschrift

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

Hier werden Sie kein Problem haben

3. Verwendung der Header-Funktion mit ob_start() und 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
?>

Am Vorabend des semantischen Webs ist Korrektheit zu beachten. Unglücklicherweise verwendet PHPs "Location" -Kopf immer noch den HTTP 302 -redirect-Code, der streng genommen nicht der beste für die Umleitung ist. Die eine, die es stattdessen verwenden sollte, ist die 303 .

W3C ist so nett zu erwähnen, dass der 303-Header mit "vielen Pre-HTTP / 1.1-Benutzeragenten" inkompatibel ist, was bei der aktuellen Verwendung keinen Browser darstellen würde. Also, das 302 ist ein Relikt, das nicht benutzt werden sollte.

... oder du könntest es einfach ignorieren, wie alle anderen ...


Der beste Weg zur Umleitung mit PHP ist der folgende Code ...

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

Stellen Sie sicher, dass kein Code danach funktioniert

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

Alle Codes müssen vor der obigen Zeile ausgeführt werden.

Annehmen,

Fall 1:

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

Es wird richtig auf den Speicherort (index.php) umgeleitet.

Fall 2:

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

Der obige Code wird nicht auf den Speicherort (index.php) umgeleitet.

Hoffentlich ist es klar.


Die meisten dieser Antworten vergessen einen sehr wichtigen Schritt!

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

Wenn Sie diese wichtige zweite Linie verlassen, sehen Sie vielleicht, dass Sie am thedailywtf.com/Articles/WellIntentioned-Destruction.aspx landen. Das Problem besteht darin, dass Browser die Header, die von Ihrer Seite zurückgegeben werden, nicht berücksichtigen müssen. Wenn die Header ignoriert werden, wird der Rest der Seite ohne Umleitung ausgeführt.


Ich habe diese Frage bereits beantwortet, aber ich werde es wieder tun, da ich inzwischen erfahren habe, dass es spezielle Fälle gibt, wenn Sie in CLI laufen (Umleitungen können nicht passieren und sollten daher nicht exit() ) oder wenn Ihr Webserver betreibt PHP als (F) CGI (es benötigt einen zuvor gesetzten Status Header, um richtig umzuleiten).

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();
    }
}

Ich habe auch das Problem der Unterstützung der verschiedenen HTTP-Umleitungscodes ( 301 , 302 , 303 und 307 ) behandelt, wie es in den Kommentaren meiner vorherigen Antwort angesprochen wurde, hier sind die Beschreibungen:

  • 301 - Permanent verschoben
  • 302 - Gefunden
  • 303 - Siehe Andere
  • 307 - Temporäre Weiterleitung (HTTP / 1.1)

Ja, Sie können die Funktion header() verwenden,

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

Außerdem empfiehlt es sich, die Funktion exit() direkt nach der Funktion header() aufzurufen, um die Ausführung unterhalb des Codes zu vermeiden.

Entsprechend der Dokumentation muss header() aufgerufen werden, bevor eine tatsächliche Ausgabe gesendet wird.


Sie können Sitzungsvariablen verwenden, um den Zugriff auf Seiten zu steuern und auch gültige Benutzer zu autorisieren.

<?php

session_start();

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

// Page goes here
?>

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


Sie können den Header in php: header aktualisieren


Sie können versuchen, die PHP-Header-Funktion zu verwenden, um die Umleitung durchzuführen. Sie sollten den Ausgabepuffer so einstellen, dass Ihr Browser keine Weiterleitungswarnung an den Bildschirm sendet.

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

Um den Besucher auf eine andere Seite umzuleiten (besonders nützlich in einer bedingten Schleife), verwenden Sie einfach den folgenden Code:

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

In diesem Fall ist mypage.php die Adresse der Seite, auf die Sie die Besucher umleiten möchten. Diese Adresse kann absolut sein und die Parameter in diesem Format enthalten: mypage.php?param1=val1¶m2=val2)

Relativer / absoluter Pfad

Bei relativen oder absoluten Pfaden ist es ideal, einen absoluten Pfad vom Stamm des Servers (DOCUMENT_ROOT) zu wählen. Verwenden Sie das folgende Format:

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

Wenn sich die Zielseite auf einem anderen Server befindet, fügen Sie die vollständige URL hinzu:

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

HTTP-Header

Laut HTTP-Protokoll müssen HTTP-Header before jedem Inhaltstyp gesendet werden. Das bedeutet, dass vor dem Header keine Zeichen gesendet werden sollten - nicht einmal ein leerer Platz!

Temporäre / permanente Umleitungen

Standardmäßig handelt es sich bei der oben angegebenen Art der Umleitung um eine vorübergehende Umleitung. Dies bedeutet, dass Suchmaschinen wie Google die Umleitung bei der Indizierung nicht berücksichtigen.

Wenn Sie Suchmaschinen benachrichtigen möchten, dass eine Seite dauerhaft an einen anderen Ort verschoben wurde, verwenden Sie den folgenden Code:

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

Zum Beispiel hat diese Seite den folgenden Code:

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

Wenn Sie auf den obigen Link klicken, werden Sie automatisch auf diese Seite weitergeleitet. Darüber hinaus ist es eine permanente Umleitung (Status: 301 Permanent verschoben). Wenn Sie also die erste URL in Google eingeben, werden Sie automatisch zum zweiten umgeleiteten Link weitergeleitet.

Interpretation von PHP-Code

Der PHP-Code, der sich hinter dem header () befindet, wird vom Server interpretiert, selbst wenn der Besucher sich an die in der Umleitung angegebene Adresse bewegt. In den meisten Fällen bedeutet dies, dass Sie eine Methode benötigen, um der Funktion header() Funktion exit() zu folgen, um die Belastung des Servers zu verringern:

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

Viele dieser Antworten sind korrekt, aber sie gehen davon aus, dass Sie eine absolute URL haben, was möglicherweise nicht der Fall ist. Wenn Sie eine relative URL verwenden und den Rest generieren möchten, können Sie so etwas tun ...

$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

Wahrscheinlich zu spät, um diese Frage zu beantworten. Trotzdem, hier sind meine Gedanken:

IMHO, der beste Weg, um eine eingehende Anfrage umzulenken, wäre mit Hilfe von Location-Header, die geht

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

Sobald diese Anweisung ausgeführt und die Ausgabe gesendet wurde, beginnt der Browser den Benutzer neu zu leiten. Stellen Sie jedoch sicher, dass vor dem Senden der Header keine Ausgabe (kein Echo / var_dump) erfolgt ist, da dies sonst zu Fehlern führen kann.

Obwohl dies ein schneller und schmutziger Weg ist, um das zu erreichen, was ursprünglich verlangt wurde, würde es sich letztendlich als ein SEO-Desaster herausstellen, da diese Art von Neuausrichtung immer als 301/302 interpretiert wird, daher werden Suchmaschinen dies tun Ihre Indexseite wird immer als umgeleitete Seite und nicht als eine Zielseite / Hauptseite angezeigt. Daher wird es Auswirkungen auf die SEO-Einstellungen der Website haben.


Wie andere hier sagten, senden Sie den Standort-Header mit:

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

aber Sie müssen es tun, bevor Sie eine andere Ausgabe an den Browser gesendet haben.

Wenn Sie dies verwenden, um nicht authentifizierte Benutzer von bestimmten Seiten zu blockieren, wie Sie bereits erwähnt haben, denken Sie daran, dass einige Benutzeragenten thedailywtf.com/Articles/WellIntentioned-Destruction.aspx und trotzdem auf der aktuellen Seite fortfahren, so dass Sie sterben müssen ( ) nachdem du es gesendet hast.


Wir können es auf zwei Arten tun

  1. Wenn Benutzer auf https://bskud.com/PINCODE/BIHAR/index.php kommen, leiten Sie sie auf https://bskud.com/PINCODE/BIHAR.php

von unten php code

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

Speichern Sie den obigen Code in https://bskud.com/PINCODE/BIHAR/index.php

2.Wenn irgendeine Bedingung wahr ist, dann redirect zu anderer Seite

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

`


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

oder wenn Sie bereits PHP-Tags geöffnet haben, verwenden Sie Folgendes:

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

Sie können auch auf externe Seiten umleiten, zB:

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

Stellen Sie sicher, dass Sie exit() oder 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);

Vergiss nicht zu sterben () / exit ()!







redirect