Είναι δυνατή η ανακατεύθυνση ενός χρήστη σε μια διαφορετική σελίδα μέσω της χρήσης της PHP;
Ας πούμε ότι ο χρήστης πηγαίνει στο www.example.com/page.php
και θέλω να τον ανακατευθύνω στο www.example.com/index.php
, πώς θα το κάνω αυτό χωρίς τη χρήση μιας μετα-ανανέωσης; Είναι δυνατόν;
Αυτό θα μπορούσε ακόμη και να προστατεύσει τις σελίδες μου από μη εξουσιοδοτημένους χρήστες.
Χρησιμοποιήστε τη συνάρτηση header()
για να στείλετε μια επικεφαλίδα HTTP Location
:
header('Location: '.$newURL);
Σε αντίθεση με ό,τι πιστεύουν κάποιοι, η die()
δεν έχει καμία σχέση με την ανακατεύθυνση. Χρησιμοποιήστε την μόνο αν θέλετε να κάνετε ανακατεύθυνση αντί της κανονικής εκτέλεσης.
Αρχείο example.php:
<?php
header('Location: static.html');
$fh = fopen('/tmp/track.txt', 'a');
fwrite($fh, $_SERVER['REMOTE_ADDR'] . ' ' . date('c') . "\n");
fclose($fh);
?>
Αποτέλεσμα τριών εκτελέσεων:
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
Συνέχιση — Η υποχρεωτική die()
/exit()
είναι κάποιος αστικός μύθος που δεν έχει καμία σχέση με την πραγματική PHP. Δεν έχει καμία σχέση με το ότι ο πελάτης "σέβεται" την επικεφαλίδα Location:
. Η αποστολή μιας επικεφαλίδας δεν σταματά την εκτέλεση της PHP, ανεξάρτητα από τον πελάτη που χρησιμοποιείται.
function Redirect($url, $permanent = false)
{
if (headers_sent() === false)
{
header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
}
exit();
}
Redirect('http://www.google.com/', false);
Μην ξεχάσετε να χρησιμοποιήσετε την die()/exit()!
header( 'Location: http://www.yoursite.com/new_page.html' );