Ist es möglich, einen Benutzer mithilfe von PHP auf eine andere Seite umzuleiten?
Angenommen, der Benutzer geht zu www.example.com/page.php
und ich möchte ihn umleiten www.example.com/index.php
. Wie würde ich dies ohne die Verwendung einer Meta-Aktualisierung tun? Ist es möglich?
Dies könnte sogar meine Seiten vor nicht autorisierten Benutzern schützen.
protection from unauthorized users
über Umleitung; So sollten die Dinge nicht gemacht werden;)Antworten:
Zusammenfassung der vorhandenen Antworten plus meine eigenen zwei Cent:
1. Grundlegende Antwort
Sie können die
header()
Funktion verwenden, um einen neuen HTTP-Header zu senden. Dieser muss jedoch vor HTML oder Text (<!DOCTYPE ...>
z. B. vor der Deklaration) an den Browser gesendet werden .2. Wichtige Details
die () oder exit ()
Warum sollten Sie verwenden
die()
oderexit()
: The Daily WTFAbsolute oder relative URL
Seit Juni 2014 können sowohl absolute als auch relative URLs verwendet werden. Siehe RFC 7231, der den alten RFC 2616 ersetzt hatte , bei dem nur absolute URLs zulässig waren.
Statuscodes
Der "Location" -Header von PHP verwendet weiterhin den HTTP 302- direkten Code, dies ist jedoch nicht der Code, den Sie verwenden sollten. Sie sollten entweder 301 (permanente Weiterleitung) oder 303 (andere) in Betracht ziehen .
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 Spider und Roboter.
3. Dokumentation
HTTP-Header und die
header()
Funktion in PHP4. Alternativen
Sie können die alternative Methode verwenden, für
http_redirect($url);
die das PECL-Paket pecl installiert werden muss.5. Hilfsfunktionen
Diese Funktion enthält nicht den 303-Statuscode:
Das ist flexibler:
6. Problemumgehung
Wie bereits erwähnt,
header()
funktionieren Weiterleitungen nur, bevor etwas ausgeschrieben wird. Sie schlagen normalerweise fehl, wenn sie in der HTML- Ausgabe aufgerufen werden. Dann könnten Sie eine HTML-Header-Problemumgehung (nicht sehr professionell!) Verwenden, wie:Oder sogar eine JavaScript-Weiterleitung.
quelle
header('Location: '.$newURL);
muss es sein, bevor HTML (oder Text) an den Browser übergeben wurde, sonst funktioniert es nicht richtig.http-equiv="Location"
wird nicht von allen Browsern unterstützt. Sie solltenrefresh
stattdessen verwenden!<meta http-equiv="refresh" content="0;url=http://example.com/">
Verwenden Sie die
header()
Funktion , um einen HTTP-Location
Header zu senden :Im Gegensatz zu dem, was manche denken,
die()
hat dies nichts mit Umleitung zu tun. Verwenden Sie es nur, wenn Sie anstelle der normalen Ausführung umleiten möchten .Datei example.php :
Ergebnis von drei Hinrichtungen:
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 denLocation:
Header "respektiert" . Das Senden eines Headers stoppt die PHP-Ausführung nicht, unabhängig vom verwendeten Client.quelle
exit()
um zu verhindern, dass auf der Seite der verbleibende Inhalt angezeigt wird (denken Sie an eingeschränkte Seiten). vartec ist richtig, es hat nichts mit dem HTTP- Speicherort- Header zu tun und Sie müssen es nichtexit
. Ich habe mich dafür entschieden, es in meine Antwort aufzunehmen, weil für jemanden, der nicht weiß, wie man eine einfache Weiterleitung durchführt, man genauso gut auf Nummer sicher gehen kann, anstatt keinen einfachen, aber entscheidenden Schritt zu implementieren, nur um den fortgeschrittenen Prozess nutzen zu können Steuerung..htaccess
um umzuleiten, aber ich brauche eine Möglichkeit, um irgendwie weiterzuleiten, welche Domain an die endgültige Domain umgeleitet wird?Vergiss nicht zu sterben () / exit ()!
quelle
Geben Sie JavaScript aus PHP mit Echo aus, um die Aufgabe zu erledigen.
Sie können dies in PHP nicht wirklich tun, es sei denn, Sie puffern die Seitenausgabe und überprüfen später die Umleitungsbedingung. Das könnte zu mühsam sein. Denken Sie daran, dass Header das erste sind, was von der Seite gesendet wird. 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 nach dem Umleitungszustand suchen. An diesem Punkt können Sie entweder den Seitenbenutzer-Header () umleiten oder einfach die gepufferte Ausgabe wiedergeben.
Weitere Informationen zum Puffern (Vorteile)
Was ist Ausgabepufferung?
quelle
Cannot modify header information - headers already sent by
Fehler.Wenn Sie jedoch die Header-Funktion verwenden, erhalten Sie manchmal die Meldung "Warnung wie bereits gesendeter Header" , um zu beheben, dass vor dem Senden von Headern kein Echo oder Druck erfolgt, oder Sie können einfach
die()
oderexit()
nach der Header-Funktion verwenden.Hier werden Sie kein Problem haben
quelle
Die meisten dieser Antworten vergessen einen sehr wichtigen Schritt!
Wenn Sie diese wichtige zweite Zeile weglassen, werden Sie möglicherweise bei The Daily WTF landen . Das Problem ist , dass Browser nicht hat , um die Header zu respektieren , die Ihre Seite Rückkehr, so mit Header ignoriert werden, wird der Rest der Seite ohne eine Umleitung ausgeführt werden.
quelle
die();
Ihnen - wenn Sie es nicht tun, kann der Benutzer die komplette Seite für einen Moment sehen, wenn Sie es verwenden; Der Benutzer wird umgeleitet und es wird kein temporärer InhaltsfehlerVerwenden:
Oder wenn Sie bereits PHP-Tags geöffnet haben, verwenden Sie Folgendes:
Sie können auch auf externe Seiten umleiten, z.
Stellen Sie sicher, dass Sie einschließen
exit()
oder einschließendie()
.quelle
Sie können Sitzungsvariablen verwenden, um den Zugriff auf Seiten zu steuern und gültige Benutzer zu autorisieren:
http://php.net/manual/en/reserved.variables.session.php .
Vor kurzem 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 in einer Textdatei einen Protokollzugriff für die IP-Adresse und die Benutzersitzungen hinzugefügt, da ich meine Datenbank nicht stören möchte.
quelle
Viele dieser Antworten sind korrekt, setzen jedoch 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 ...
quelle
header( 'Location: http://www.yoursite.com/new_page.html' );
quelle
.htaccess
um umzuleiten, aber ich brauche eine Möglichkeit, um irgendwie weiterzuleiten, welche Domain an die endgültige Domain umgeleitet wird?Verwenden Sie den folgenden Code:
quelle
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 stattfinden und sollten dies auch nicht
exit()
) oder wenn Ihr Webserver dies ist Ausführen von PHP als (F) CGI (es benötigt einen zuvor festgelegtenStatus
Header, um richtig umzuleiten).Ich habe auch die Frage der Unterstützung der verschiedenen HTTP - Umleitung Codes behandelt (
301
,302
,303
und307
), wie es in den Kommentaren meiner früheren Antwort gerichtet. Hier sind die Beschreibungen:quelle
Verwenden Sie einfach den folgenden Code, um den Besucher auf eine andere Seite umzuleiten (besonders nützlich in einer bedingten Schleife):
In diesem Fall
mypage.php
ist dies die Adresse der Seite, zu der Sie die Besucher weiterleiten 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 sich mit relativen oder absoluten Pfaden befassen, ist es ideal, einen absoluten Pfad aus dem Stammverzeichnis des Servers (DOCUMENT_ROOT) auszuwählen. Verwenden Sie das folgende Format:
Wenn sich die Zielseite jemals auf einem anderen Server befindet, geben Sie die vollständige URL an:
HTTP-Header
Gemäß dem HTTP-Protokoll müssen HTTP-Header mit
before
jeder Art von Inhalt gesendet werden. Dies bedeutet, dass niemals Zeichen vor dem Header gesendet werden sollten - nicht einmal ein leeres Feld!Temporäre / permanente Weiterleitungen
Standardmäßig handelt es sich bei der oben dargestellten Art der Umleitung um eine vorübergehende 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:
Diese Seite enthält beispielsweise den folgenden Code:
Wenn Sie auf den obigen Link klicken, werden Sie automatisch zu dieser 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 des PHP-Codes
Der nach dem Header () befindliche PHP-Code 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
header()
Funktion derexit()
Funktion zu folgen , um die Auslastung des Servers zu verringern:quelle
¶
(gegen Ende des zweiten Absatzes)? Meinst du¶
stattdessen (so liest sich das Ganzemypage.php?param1=val1¶m2=val2)
)? (Die HTML-Entität para ) ist "¶" - hat vielleicht ein externes Programm eine Konvertierung durchgeführt?).Verwenden:
Dies ist eine reguläre und normale PHP-Weiterleitung. Sie können jedoch eine Umleitungsseite mit einigen Sekunden Wartezeit mithilfe des folgenden Codes erstellen:
quelle
Am Vorabend des Semantic Web ist Korrektheit zu berücksichtigen. Leider verwendet der "Location" -Header von PHP immer noch den HTTP 302- Weiterleitungscode, der streng genommen nicht der beste für die Umleitung ist. Die, die es stattdessen verwenden sollte, ist die 303 .
W3C ist so freundlich zu erwähnen, dass der 303-Header nicht mit "vielen Benutzeragenten vor HTTP / 1.1" kompatibel ist, was bedeuten würde, dass derzeit kein Browser verwendet wird. Der 302 ist also ein Relikt, das nicht verwendet werden sollte.
... oder du könntest es einfach ignorieren, wie alle anderen ...
quelle
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");
quelle
Ja, Sie können die Funktion header () verwenden.
Außerdem empfiehlt es sich, die Funktion exit () direkt nach der
header()
Funktion aufzurufen , um die folgende Codeausführung zu vermeiden.Laut Dokumentation
header()
muss aufgerufen werden, bevor eine tatsächliche Ausgabe gesendet wird.quelle
Wie andere hier sagten, senden Sie den Standort-Header mit:
Sie müssen dies jedoch tun, bevor Sie eine andere Ausgabe an den Browser senden.
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 dies ignorieren und trotzdem auf der aktuellen Seite fortfahren, sodass Sie sterben müssen ( ) nachdem Sie es gesendet haben.
quelle
but you need to do it before you've sent any other output to the browser.
Genial!! Ich habe minutenlang gesucht, warum ich immer wieder die bereits gesendeten Header-Fehler erhalten habe. +1 !!die()
ist nur ein Weg, das zu tun.Hier sind meine Gedanken:
IMHO, der beste Weg, um eine eingehende Anfrage umzuleiten, wäre die Verwendung von Standort-Headern
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 (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 gefragt wurde, würde es sich letztendlich als SEO-Katastrophe herausstellen, da diese Art der Weiterleitung immer als 301/302-Weiterleitung interpretiert wird, sodass Suchmaschinen Ihre immer sehen Indexseite als umgeleitete Seite und nicht als Zielseite / Hauptseite.
Daher wirkt es sich auf die SEO-Einstellungen der Website aus.
quelle
Der beste Weg, um mit PHP umzuleiten, ist der folgende Code ...
Stellen Sie sicher, dass danach kein Code mehr funktioniert
Der gesamte Code muss vor der obigen Zeile ausgeführt werden.
Annehmen,
Fall 1:
Es wird ordnungsgemäß an den Speicherort (index.php) umgeleitet.
Fall 2:
Der obige Code wird nicht an den Speicherort (index.php) umgeleitet.
quelle
Ja, es ist möglich, PHP zu verwenden. Wir werden auf eine andere Seite weiterleiten.
Versuchen Sie folgenden Code:
quelle
1. Verwenden Sie
header
eine integrierte PHP-Funktiona) Einfache Umleitung ohne Parameter
b) Mit GET-Parametern umleiten
2. Mit JavaScript in PHP umleiten
a) Einfache Umleitung ohne Parameter
b) Mit GET-Parametern umleiten
quelle
Wir können es auf zwei Arten tun:
Wenn der Benutzer auf https://bskud.com/PINCODE/BIHAR/index.php gelangt, leiten Sie zu https://bskud.com/PINCODE/BIHAR.php weiter
Durch den folgenden PHP-Code
Speichern Sie den obigen Code unter https://bskud.com/PINCODE/BIHAR/index.php
Wenn eine Bedingung erfüllt ist, leiten Sie auf eine andere Seite weiter:
quelle
header()
Funktion.Verwenden:
quelle
Es gibt mehrere Möglichkeiten, dies zu tun, aber wenn Sie es vorziehen
php
, würde ich die Verwendung derheader()
Funktion empfehlen .Grundsätzlich
Wenn Sie es noch besser machen möchten, verwenden Sie es am besten in Funktionen. Auf diese Weise können Sie Authentifizierungen und andere Überprüfungselemente hinzufügen.
Versuchen wir es, indem wir die Ebene des Benutzers überprüfen.
Angenommen, Sie haben die Berechtigungsstufe des Benutzers in einer aufgerufenen Sitzung gespeichert
u_auth
.In dem
function.php
Sie rufen dann die Funktion für jede Seite auf, die Sie authentifizieren möchten.
Wie in
page.php
oder einer anderen Seite.Verweise;
quelle
Ich mag die Art der Umleitung im Laufe der Zeit.
quelle
Verwenden der Header-Funktion für das Routing
Angenommen, wir möchten von der A.php- Datei zur B.php- Route weiterleiten , als wir Hilfe von
<button>
oder benötigen<a>
. Sehen wir uns ein Beispiel anB.php
quelle
Wenn Sie mit Apache arbeiten, können Sie auch .htaccess für die Umleitung verwenden.
quelle
Sie können versuchen, die PHP-
header
Funktion für die Umleitung zu verwenden. Sie sollten den Ausgabepuffer so einstellen, dass Ihr Browser keine Umleitungswarnung auf den Bildschirm wirft.quelle
Probier diese
quelle