it-swarm.com.de

Wie mache ich eine Umleitung in PHP?

Ist es möglich, einen Benutzer mit PHP auf eine andere Seite umzuleiten?

Angenommen, der Benutzer geht zu www.example.com/page.php und ich möchte ihn zu www.example.com/index.php umleiten. Wie würde ich dies ohne die Verwendung einer Meta-Aktualisierung tun? Ist es möglich?

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

1172
Sam

Zusammenfassung der vorhandenen Antworten plus meine eigenen zwei Cent:

1. Grundlegende Antwort

Sie können die Funktion header() verwenden, um einen neuen HTTP-Header zu senden. Dieser muss jedoch vor HTML oder Text an den Browser gesendet werden (z. B. vor der Deklaration <!DOCTYPE ...>).

header('Location: '.$newURL);

2. Wichtige Details

sterben () oder beenden ()

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

Warum sollten Sie die() oder exit() verwenden: The Daily WTF

Absolute oder relative URL

Seit Juni 2014 können sowohl absolute als auch relative URLs verwendet werden. Siehe RFC 7231 , das das alte RFC 2616 ersetzt hatte, wobei nur absolute URLs zulässig waren.

Statuscodes

Der "Location" -Header von PHP verwendet weiterhin den HTTP 302 - Redirect-Code, den Sie jedoch nicht verwenden sollten. Sie sollten entweder 1 (permanente Weiterleitung) oder (andere) berücksichtigen.

Hinweis: W3C erwähnt dass der 303-Header nicht mit "vielen Benutzeragenten vor HTTP/1.1" kompatibel ist. Derzeit verwendete Browser sind alle HTTP/1.1-Benutzeragenten. Dies gilt nicht für viele andere Benutzeragenten wie Spinnen und Roboter.

3. Dokumentation

HTTP-Header und die Funktion header() in PHP

4. Alternativen

Sie können die alternative Methode von http_redirect($url); verwenden, für die das PECL-Paket pecl installiert werden muss.

5. Hilfsfunktionen

Diese Funktion enthält nicht den Statuscode 303:

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

    exit();
}

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

Das ist flexibler:

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

6. Problemumgehung

Wie bereits erwähnt, funktionieren header() Redirects nur, bevor etwas ausgeschrieben ist. Sie schlagen normalerweise fehl, wenn in HTML aufgerufen ausgegeben wird. Dann könnten Sie eine HTML-Header-Problemumgehung verwenden (nicht sehr professionell!) Wie:

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

Oder sogar eine JavaScript-Weiterleitung.

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

Verwenden Sie die Funktion header() , um einen HTTP Location -Header zu senden:

header('Location: '.$newURL);

Im Gegensatz zu dem, was manche denken, hat die() nichts mit Umleitung zu tun. Verwenden Sie es nur , wenn Sie anstelle der normalen Ausführung umleiten möchten.

Datei example.php :

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

Ergebnis von drei Hinrichtungen:

[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

Wiederaufnahme - obligatorisch die()/exit() ist eine urbane Legende, die nichts mit tatsächlichem PHP zu tun hat. Es hat nichts damit zu tun, dass der Client den Header Location: "respektiert". Das Senden eines Headers stoppt die Ausführung von PHP nicht, unabhängig vom verwendeten Client.

108
vartec
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 ()/auszusteigen ()!

104
Alix Axel

Geben Sie JavaScript von PHP mit echo aus, das den Job erledigt.

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

Sie können es in PHP nicht wirklich tun, es sei denn, Sie puffern die Seitenausgabe und überprüfen später, ob eine Umleitungsbedingung vorliegt. Das könnte zu mühsam sein. Denken Sie daran, dass als erstes Header von der Seite gesendet werden. Der größte Teil der Weiterleitung wird normalerweise später auf der Seite benötigt. Dazu müssen Sie die gesamte Ausgabe der Seite puffern und später die Weiterleitungsbedingung überprüfen. An diesem Punkt können Sie entweder die Kopfzeile des Seitenbenutzers umleiten () oder einfach die gepufferte Ausgabe wiedergeben.

Weitere Informationen zum Puffern (Vorteile)

Was ist Ausgabepufferung?

95
Hammad Khan

1. Verwenden der Header-Funktion mit exit()

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

wenn Sie jedoch die Header-Funktion verwenden, erhalten Sie manchmal "Warnung wie bereits gesendeter Header", um zu beheben, dass vor dem Senden von Headern kein Echo oder Ausdruck erfolgt, oder Sie können einfach die() oder exit() nach der Header-Funktion.

2. Ohne Header

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

hier werden Sie kein Problem haben

. Verwenden 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
?>
81
Juned Ansari

Die meisten dieser Antworten vergessen einen sehr wichtigen Schritt!

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

Wenn Sie diese wichtige zweite Zeile weglassen, erhalten Sie möglicherweise The Daily WTF . Das Problem ist, dass Browser die von Ihrer Seite zurückgegebenen Überschriften nicht beachten müssen . Wenn also die Überschriften ignoriert werden, wird der Rest der Seite ohne Weiterleitung ausgeführt.

53
nickf

Verwenden:

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

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, z.

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

Stellen Sie sicher, dass Sie exit() oder include die() einschließen.

23
jake

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:../");
        exit();
    }

    // Page goes here
?>

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

Kürzlich bekam ich Cyber-Angriffe und entschied, dass ich die Benutzer kennen musste, die versuchten, auf das Admin-Panel oder einen reservierten Teil der Webanwendung zuzugreifen.

Daher habe ich einen Protokollzugriff für die IP-Adresse und Benutzersitzungen in eine Textdatei eingefügt, da ich meine Datenbank nicht stören möchte.

19
Asuquo12

Viele dieser Antworten sind richtig, aber sie setzen voraus, 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
18
Luke

Ich habe diese Frage bereits beantwortet, aber ich werde es erneut tun, da ich inzwischen erfahren habe, dass es Sonderfälle gibt, wenn Sie in CLI ausgeführt werden (Weiterleitungen können nicht vorkommen und sollten daher nicht exit()). oder wenn Ihr Webserver PHP als (F) CGI ausführt (für die ordnungsgemäße Weiterleitung ist ein zuvor festgelegter Status -Header erforderlich).

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 meines Vorgängers angesprochen wurde Antworten. Hier sind die Beschreibungen:

  • 1 - Permanent umgezogen
  • 2 - Gefunden
  • - Siehe Andere
  • 7 - Temporäre Umleitung (HTTP/1.1)
13
Alix Axel

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

13
Daniel A. White
header("Location: /index.php");
exit(0);   
10
joan16v

Es gibt zwei Möglichkeiten zur Umleitung

Mit PHP

<?php 

header("Location: http://example.com/page.php");
die();
?>

sing Jquery

<script>

     $(document).ready(function(){
    location.href = 'http://example.com/page.php';
     });

</script>
9
Javed Khan

sie können diese Code-Umleitung von einer Seite zur anderen verwenden

header("Location: index.php");

oder wenn Sie versuchen, mit JavaScript in PHP umzuleiten, dann verwenden Sie Script-Tag für die Umleitung

echo "<script>window.open('your path where you redirect ','_self')</script>";
8
Kashif

Verwenden:

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

Dies ist eine normale und normale PHP Weiterleitung, aber Sie können eine Weiterleitungsseite mit dem folgenden Code erstellen, indem Sie einige Sekunden warten:

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

Sie können einige JavaScript-Methoden wie unten verwenden

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

8
Vikram Pote

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 folgende Codeausführung zu vermeiden.

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

7
Casper

Hier sind meine Gedanken:

Meiner Meinung nach ist die beste Möglichkeit, eine eingehende Anfrage umzuleiten, die Verwendung von Standortköpfen

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

Sobald diese Anweisung ausgeführt und die Ausgabe gesendet wurde, leitet der Browser den Benutzer um. Stellen Sie jedoch sicher, dass vor dem Senden von Headern keine Ausgabe erfolgt ist (echo/var_dump), da dies sonst zu Fehlern führt.

Obwohl dies ein schneller und schmutziger Weg ist, um das zu erreichen, was ursprünglich verlangt wurde, würde es sich letztendlich als SEO-Desaster herausstellen, da diese Art der Weiterleitung immer als 301/302-Weiterleitung interpretiert wird, sodass Suchmaschinen Ihre Website immer sehen Indexseite als umgeleitete Seite und nicht als Zielseite/Hauptseite.

Daher wird es die SEO-Einstellungen der Website beeinflussen.

6

Am Vorabend des Semantic Web gilt es, die Korrektheit zu berücksichtigen. Leider verwendet der "Location" -Header von PHP immer noch den HTTP 302 - Redirect-Code, der streng genommen nicht der beste für die Umleitung ist. Derjenige, den es verwenden sollte, ist der 303 .

W3C ist so freundlich zu erwähnen , dass der 303-Header nicht mit "vielen Benutzeragenten vor HTTP/1.1" kompatibel ist, was bedeutet, dass derzeit kein Browser verwendet wird. Die 302 ist also ein Relikt, das nicht verwendet werden sollte .

... oder Sie könnten es einfach ignorieren, wie alle anderen ...

6
Henrik Paul

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

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

sie müssen dies jedoch tun, bevor Sie eine andere Ausgabe an den Browser senden.

Wenn Sie dies verwenden möchten, um nicht authentifizierte Benutzer von bestimmten Seiten zu blockieren, wie Sie bereits erwähnt haben, denken Sie daran, dass einige Benutzeragenten dies wird ignoriert und trotzdem auf der aktuellen Seite fortfahren Sie müssen sterben (), nachdem Sie es gesendet haben.

6
Brent

Verwenden Sie einfach den folgenden Code, um den Besucher zu einer anderen Seite umzuleiten (besonders nützlich in einer bedingten Schleife):

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

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

Relativer/Absoluter Pfad

Wenn Sie mit relativen oder absoluten Pfaden arbeiten, ist es ideal, einen absoluten Pfad aus dem Stammverzeichnis des Servers (DOCUMENT_ROOT) zu wählen. Verwenden Sie das folgende Format:

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

Wenn sich die Zielseite jemals auf einem anderen Server befindet, geben Sie die vollständige URL an:

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

HTTP-Header

Gemäß dem HTTP-Protokoll müssen HTTP-Header before für jeden Inhaltstyp gesendet werden. Dies bedeutet, dass niemals Zeichen vor dem Header gesendet werden sollten - nicht einmal ein Leerzeichen!

Temporäre/Permanente Weiterleitungen

Standardmäßig handelt es sich bei der oben dargestellten Umleitungsart um eine temporäre Umleitung. Dies bedeutet, dass Suchmaschinen wie die Google-Suche 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');
?>

Diese Seite hat beispielsweise 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 handelt es sich um 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 nach dem Header () wird vom Server interpretiert, auch wenn der Besucher zu der in der Umleitung angegebenen Adresse wechselt. In den meisten Fällen bedeutet dies, dass Sie eine Methode benötigen, um der Funktion header() der Funktion exit() zu folgen, um die Belastung des Servers zu verringern:

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

Der beste Weg, mit PHP umzuleiten, ist der folgende Code ...

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

Stellen Sie sicher, dass kein Code mehr funktioniert

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

Der gesamte Code muss vor der obigen Zeile ausgeführt werden.

Annehmen,

Fall 1:

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

Es wird ordnungsgemäß an den Speicherort (index.php) umgeleitet.

Fall 2:

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

Der obige Code leitet nicht an den Speicherort (index.php) weiter.

5
sabuz

Ja, es ist möglich PHP zu benutzen. Wir werden auf eine andere Seite weiterleiten.

Versuchen Sie folgenden Code:

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

verwenden Sie diesen Code für die Weiterleitung

header("Location: http://www.example.com/blog");
4
user8031209

Wir können es auf zwei Arten tun:

  1. Wenn der Benutzer sich anmeldet https://bskud.com/PINCODE/BIHAR/index.php , leiten Sie ihn zu https://bskud.com/PINCODE/BIHAR.php weiter

    Durch den folgenden 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 eine Bedingung erfüllt ist, leiten Sie auf eine andere Seite weiter:

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

1. Verwenden von header, einer integrierten PHP -Funktion

a) Einfache Weiterleitung ohne Parameter

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

b) Umleiten mit GET-Parametern

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

2. Mit JavaScript in PHP umleiten

a) Einfache Weiterleitung ohne Parameter

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

b) Umleiten mit GET-Parametern

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

Verwenden:

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

Sie können versuchen, die Umleitung mit der Funktion PHP header durchzuführen. Sie möchten den Ausgabepuffer so einstellen, dass Ihr Browser keine Umleitungswarnung auf den Bildschirm ausgibt.

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

Wenn Sie mit Apache arbeiten, können Sie auch .htaccess für die Umleitung verwenden.

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

verwenden Sie diesen Code für eine bessere Weiterleitung:

$ref="http://www.example.com';
echo '<script>window.location = "'.$ref.'";</script>';  
exit;
1
user8031209

Es gibt mehrere Möglichkeiten, dies zu tun. Wenn Sie jedoch php bevorzugen, empfehle ich die Verwendung der header() -Funktion.

Grundsätzlich

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

Wenn Sie eine Stufe besser machen möchten, ist es am besten, sie in Funktionen zu verwenden. Auf diese Weise können Sie Authentifizierungen und andere Prüfelemente hinzufügen.

Probieren Sie es aus, indem Sie die Stufe des Benutzers überprüfen.

Angenommen, Sie haben die Berechtigungsstufe des Benutzers in einer Sitzung mit dem Namen u_auth gespeichert.

In der 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;
        }
     }

     . . .

Anschließend rufen Sie die Funktion für jede Seite auf, die Sie authentifizieren möchten.

Wie in page.php oder einer anderen Seite.

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

    . . .

Verweise;

1
Pyr James