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.
Zusammenfassung der vorhandenen Antworten plus meine eigenen zwei Cent:
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);
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.
HTTP-Header und die Funktion header()
in PHP
Sie können die alternative Methode von http_redirect($url);
verwenden, für die das PECL-Paket pecl installiert werden muss.
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();
}
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/");
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.
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 ()!
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)
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()
undob_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
?>
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.
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.
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.
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
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:
header( 'Location: http://www.yoursite.com/new_page.html' );
header("Location: /index.php");
exit(0);
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>
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>";
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.
?>
Sie können einige JavaScript-Methoden wie unten verwenden
self.location="http://www.example.com/index.php";
window.location.href="http://www.example.com/index.php";
document.location.href = 'http://www.example.com/index.php';
window.location.replace("http://www.example.com/index.php");
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.
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.
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 ...
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.
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();
?>
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.
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");
?>
verwenden Sie diesen Code für die Weiterleitung
header("Location: http://www.example.com/blog");
Wir können es auf zwei Arten tun:
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
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>";
}
?>
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>";
?>
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();
Wenn Sie mit Apache arbeiten, können Sie auch .htaccess für die Umleitung verwenden.
Redirect 301 / http://new-site.com/
verwenden Sie diesen Code für eine bessere Weiterleitung:
$ref="http://www.example.com';
echo '<script>window.location = "'.$ref.'";</script>';
exit;
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;