Hoe maak ik een omleiding in PHP?

Is het mogelijk om een gebruiker om te leiden naar een andere pagina door middel van PHP?

Stel dat de gebruiker naar www.example.com/page.phpgaat en ik wil ze omleiden naar www.example.com/index.php, hoe zou Ik doe dit zonder het gebruik van een meta-refresh? Is het mogelijk?

Dit zou zelfs mijn pagina’s kunnen beschermen tegen onbevoegde gebruikers.


Antwoord 1, autoriteit 100%

Samenvatting van bestaande antwoorden plus mijn eigen twee cent:

1. Basisantwoord

U kunt de functie header()gebruiken om een nieuwe HTTP-header te verzenden, maar deze moet vóór HTML of tekst naar de browser worden verzonden (dus vóór de <!DOCTYPE ...>aangifte, bijvoorbeeld).

header('Location: '.$newURL);

2. Belangrijke details

die()of exit()

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

Waarom u die()of exit()moet gebruiken: De dagelijkse WTF

Absolute of relatieve URL

Sinds juni 2014 kunnen zowel absolute als relatieve URL’s worden gebruikt. Zie RFC 7231die de oude RFC 2616, waar alleen absolute URL’s waren toegestaan.

Statuscodes

PHP’s “Locatie”-header gebruikt nog steeds de HTTP 302-omleidingscode, dit is een “tijdelijke” omleiding en is mogelijk niet degene die u zou moeten gebruiken. U moet overwegen ofwel 301(permanente omleiding) of 303(overig).

Opmerking: W3C vermeldtdat de 303- header is incompatibel met “veel pre-HTTP/1.1 user agents. Momenteel gebruikte browsers zijn allemaal HTTP/1.1 user agents. Dit geldt niet voor veel andere user agents zoals spiders en robots.

3. Documentatie

HTTP-headers en de functie header()in PHP

4. Alternatieven

U kunt de alternatieve methode http_redirect($url);gebruiken waarvoor de PECL-pakket peclmoet worden geïnstalleerd.

5. Hulpfuncties

Deze functie bevat niet de 303-statuscode:

function Redirect($url, $permanent = false)
{
    header('Location: ' . $url, true, $permanent ? 301 : 302);
    exit();
}
Redirect('http://example.com/', false);

Dit is flexibeler:

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

6. Tijdelijke oplossing

Zoals vermeld header()omleidingen werken alleen voordat er iets wordt weggeschreven. Ze mislukken meestal als aangeroepen tussen HTML-uitvoer. Dan zou je een HTML-header-oplossing kunnen gebruiken (niet erg professioneel!) zoals:

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

Of zelfs een JavaScript-omleiding.

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

Antwoord 2, autoriteit 8%

Gebruik de header()-functieom een HTTP Location-headerte sturen:

header('Location: '.$newURL);

In tegenstelling tot wat sommigen denken, heeft die()niets te maken met omleiding. Gebruik het alleenals u in plaats vanwilt omleiden.

Bestand voorbeeld.php:

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

Resultaat van drie executies:

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

Hervatten — verplicht die()/exit()is een stadslegende die niets te maken heeft met echte PHP. Het heeft niets te maken met het feit dat de klant de Location:header “respecteert”. Het verzenden van een header stopt de uitvoering van PHP niet, ongeacht de gebruikte client.


Antwoord 3, autoriteit 6%

function Redirect($url, $permanent = false)
{
    if (headers_sent() === false)
    {
        header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
    }
    exit();
}
Redirect('http://www.google.com/', false);

Vergeet niet te sterven()/exit()!


Antwoord 4, autoriteit 6%

Voer JavaScript uit vanuit PHP met behulp van echo, wat het werk zal doen.

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

Je kunt het niet echt doen in PHP, tenzij je de pagina-uitvoer buffert en later controleert op omleidingscondities. Dat is misschien te veel gedoe. Onthoud dat kopteksten het eerste zijn dat vanaf de pagina wordt verzonden. Het grootste deel van de omleiding is meestal later op de pagina vereist. Daarvoor moet je alle output van de pagina bufferen en later controleren op omleidingscondities. Op dat moment kun je de gebruikersheader() van de pagina omleiden of gewoon de gebufferde uitvoer herhalen.

Voor meer informatie over bufferen (voordelen)

Wat is outputbuffering?


Antwoord 5, autoriteit 5%

1. Zonder kop

hier zul je geen enkel probleem tegenkomen

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

2. Headerfunctie gebruiken met exit()

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

maar als je de header-functie gebruikt, krijg je soms een “waarschuwing
like header reeds verzonden”
om op te lossen dat niet echo of print voordat headers worden verzonden of u kunt eenvoudig die()of exit()gebruiken na de header-functie.

3. Headerfunctie gebruiken met ob_start()en 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
?>

Antwoord 6, autoriteit 3%

De meeste van deze antwoorden vergeten een zeerbelangrijke stap!

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

Als je die essentiële tweede regel weglaat, kom je misschien terecht op The Daily WTF. Het probleem is dat browsers nietde headers die uw pagina retourneert, moeten respecteren, dus als headers worden genegeerd, wordt de rest van de pagina uitgevoerd zonder een omleiding.


Antwoord 7, autoriteit 2%

Gebruik:

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

Of als je al PHP-tags hebt geopend, gebruik dan dit:

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

U kunt ook doorverwijzen naar externe pagina’s, bijvoorbeeld:

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

Zorg ervoor dat u exit()of die()opneemt.


Antwoord 8

U kunt sessievariabelen gebruiken om de toegang tot pagina’s te beheren en ook geldige gebruikers te autoriseren:

<?php
    session_start();
    if (!isset( $_SESSION["valid_user"]))
    {
        header("location:../");
        exit();
    }
    // Page goes here
?>

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

Onlangs kreeg ik cyberaanvallen en besloot ik de gebruikers te kennen die probeerden toegang te krijgen tot het beheerdersdashboard of het gereserveerde deel van de webtoepassing.

Dus ik heb een logtoegang voor het IP-adres en gebruikerssessies in een tekstbestand toegevoegd, omdat ik mijn database niet wil storen.


Antwoord 9

Veel van deze antwoorden zijn correct, maar ze gaan ervan uit dat je een absolute URL hebt, wat misschien niet het geval is. Als je een relatieve URLwilt gebruiken en de rest wilt genereren, dan kun je zoiets als dit doen…

$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

Antwoord 10

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


Antwoord 11

Gebruik de volgende code:

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

Antwoord 12

Ik heb deze vraag al beantwoord, maar ik doe het nog een keer omdat ik ondertussen heb geleerd dat er speciale gevallen zijn als je in CLI werkt (omleidingen kunnen niet plaatsvinden en zouden dus niet exit()) of als uw webserver PHP draait als een (F)CGI (het heeft een eerder ingestelde Status-header nodig om correct om te leiden).

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

Ik heb ook de ondersteuning van de verschillende HTTP-omleidingscodes (301, 302, 303en 307), zoals het werd behandeld in de opmerkingen van mijn vorige antwoord. Hier zijn de beschrijvingen:

  • 301– Permanent verplaatst
  • 302– Gevonden
  • 303– Zie Overige
  • 307– Tijdelijke omleiding (HTTP/1.1)

13

Om de bezoeker naar een andere pagina om te leiden (met name handig in een voorwaardelijke lus), gebruikt u eenvoudig de volgende code:

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

In dit geval is mypage.phphet adres van de pagina waarop u de bezoekers wilt omleiden. Dit adres kan absoluut zijn en kan ook de parameters in dit formaat bevatten: mypage.php?param1=val1&m2=val2)

relatief / absoluut pad

Bij het omgaan met relatieve of absolute paden is het ideaal om een ​​absoluut pad uit de root van de server (Document_root) te kiezen. Gebruik het volgende formaat:

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

Als de doelpagina ooit op een andere server staat, neemt u de volledige URL op:

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

HTTP-headers

Volgens HTTP-protocol moeten HTTP-headers beforeelk type inhoud worden verzonden. Dit betekent dat er nooit geen tekens moeten worden verzonden voor de koptekst – zelfs geen lege ruimte!

tijdelijke / permanente omleidingen

Standaard is het bovenstaande type door de omleiding een tijdelijke. Dit betekent dat zoekmachines, zoals Google Search, de omleiding niet in aanmerking nemen bij het indexeren.

Als u zoekmachines wilt melden dat een pagina permanent naar een andere locatie is verplaatst, gebruikt u de volgende code:

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

Deze pagina heeft bijvoorbeeld de volgende code:

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

Wanneer u op de bovenstaande link klikt, wordt u automatisch doorgestuurd naar deze pagina. Bovendien is het een permanente omleiding (status: 301 permanent verplaatst). Als u de eerste URL in Google typt, wordt u automatisch doorgestuurd naar de tweede, omgeleide link.

interpretatie van PHP-code

De PHP-code die is na de kop () wordt geïnterpreteerd door de server, zelfs als de bezoeker beweegt naar het adres dat is opgegeven in de omleiding. In de meeste gevallen betekent dit dat u een methode nodig heeft om de header()-functie van de exit()-functie te volgen om de lading van de server te verlagen:

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

14

Gebruik:

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

Dit is een reguliere en normale PHP-omleiding, maar u kunt een omleidingspagina maken met een paar seconden wachten op de onderstaande code:

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

15

Ja, het is mogelijk om PHP te gebruiken. We zullen omleiden naar een andere pagina.

Probeer de volgende code:

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

16

U kunt sommige JavaScript-methoden zoals hieronder gebruiken

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


17

Ja, u kunt de koptekst () functie, gebruiken

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

En ook de beste praktijk is om de functie exit()naar rechts aan te roepen na de functie header()om te voorkomen dat de onderstaande code wordt uitgevoerd.

Volgens de documentatie moet header()worden aangeroepen voordat er daadwerkelijke uitvoer wordt verzonden.


Antwoord 18

Zoals anderen hier al zeiden, de locatiekop verzenden met:

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

maar je moet dit doen voordat je andere uitvoer naar de browser hebt gestuurd.

Als je dit gaat gebruiken om niet-geverifieerde gebruikers van bepaalde pagina’s te blokkeren, zoals je al zei, houd er dan rekening mee dat sommige user agents zal dit negerenen toch doorgaan op de huidige pagina, dus je zult moeten sterven() nadat je het hebt verzonden.


Antwoord 19

Hier zijn mijn gedachten:

IMHO, de beste manier om een inkomend verzoek om te leiden is door locatieheaders te gebruiken, wat gaat

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

Zodra deze instructie is uitgevoerd en de uitvoer is verzonden, begint de browser de gebruiker om te leiden. Zorg er echter voor dat er geen uitvoer is (echo / var_dump) voordat u headers verzendt, anders leidt dit tot fouten.

Hoewel dit een snelle en vuile manier is om te bereiken wat oorspronkelijk werd gevraagd, zou het uiteindelijk een SEO-ramp worden, aangezien dit soort omleiding altijd wordt geïnterpreteerd als een 301/302-omleiding, en daarom zullen zoekmachines zie uw indexpagina altijd als een omgeleide pagina en niet als een bestemmingspagina / hoofdpagina.

Het heeft dus invloed op de SEO-instellingen van de website.


Antwoord 20

De beste manier om om te leiden met PHP is de volgende code…

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

Zorg ervoor dat geen enkele code werkt na

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

Alle code moet vóór de bovenstaande regel worden uitgevoerd.

Stel,

Geval 1:

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

Het zal correct doorverwijzen naar de locatie (index.php).

Geval 2:

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

De bovenstaande code zal niet doorverwijzen naar de locatie (index.php).


Antwoord 21

1. Met behulp van header, een ingebouwde PHP-functie

a) Eenvoudige omleiding zonder parameters

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

b) Omleiden met GET-parameters

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

2. Omleiden met JavaScript in PHP

a) Eenvoudige omleiding zonder parameters

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

b) Omleiden met GET-parameters

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

Antwoord 22

Om in php om te leiden:

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


Antwoord 23

We kunnen het op twee manieren doen:

  1. Als de gebruiker op https://bskud.com/PINCODE/BIHAR komt /index.phpen vervolgens doorverwijzen naar https://bskud.com/PINCODE/BIHAR.php

    Met de onderstaande PHP-code

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

    Sla de bovenstaande code op in https://bskud.com/PINCODE/BIHAR/index. php

  2. Als een voorwaarde waar is, stuur dan door naar een andere pagina:

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

Antwoord 24

De header-functie gebruiken voor routering

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

Stel dat we willen routeren van A.phpbestand naar B.phpdan moeten we hulp gebruiken van <button>of <a>. Laten we een voorbeeld bekijken

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

25

Gebruik:

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

26

Ik hou van het soort omleiding na het tellen van seconden

<?php
header("Refresh: 3;url=https://theweek.com.br/índex.php");

27

U kunt proberen

te gebruiken

Header (‘Locatie:’. $ your_url)

Voor meer informatie kunt u verificeren PHP officiële documentatie


28

Als u op Apache gebruikt, kunt u ook gebruiken .htaccess voor omleiding.

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

Other episodes