Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I make a redirect in PHP?

Is it possible to redirect a user to a different page through the use of PHP?

Say the user goes to www.example.com/page.php and I want to redirect them to www.example.com/index.php, how would I do so without the use of a meta refresh? Is it possible?

This could even protect my pages from unauthorized users.

like image 803
Sam Avatar asked Apr 20 '09 14:04

Sam


People also ask

How do I redirect in PHP?

Answer: Use the PHP header() Function You can simply use the PHP header() function to redirect a user to a different page. The PHP code in the following example will redirect the user from the page in which it is placed to the URL http://www.example.com/another-page.php . You can also specify relative URLs.

How do I create a redirect URL?

Redirects allow you to forward the visitors of a specific URL to another page of your website. In Site Tools, you can add redirects by going to Domain > Redirects. Choose the desired domain, fill in the URL you want to redirect to another and add the URL of the new page destination. When ready, click Create.

Which function is used to redirect a page in PHP?

The header function in PHP can be used to redirect the user from one page to another. It is an in-built function that sends raw HTTP header to the destination (client).

How redirect to another page after submitting a form in PHP?

Now in PHP, redirection is done by using header() function as it is considered to be the fastest method to redirect traffic from one web page to another. The main advantage of this method is that it can navigate from one location to another without the user having to click on a link or button.


2 Answers

Summary of existing answers plus my own two cents:

1. Basic answer

You can use the header() function to send a new HTTP header, but this must be sent to the browser before any HTML or text (so before the <!DOCTYPE ...> declaration, for example).

header('Location: '.$newURL); 

2. Important details

die() or exit()

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

Why you should use die() or exit(): The Daily WTF

Absolute or relative URL

Since June 2014 both absolute and relative URLs can be used. See RFC 7231 which had replaced the old RFC 2616, where only absolute URLs were allowed.

Status Codes

PHP's "Location"-header still uses the HTTP 302-redirect code, this is a "temporary" redirect and may not be the one you should use. You should consider either 301 (permanent redirect) or 303 (other).

Note: W3C mentions that the 303-header is incompatible with "many pre-HTTP/1.1 user agents. Currently used browsers are all HTTP/1.1 user agents. This is not true for many other user agents like spiders and robots.

3. Documentation

HTTP Headers and the header() function in PHP

  • What the PHP manual says
  • What Wikipedia says
  • What the W3C says

4. Alternatives

You may use the alternative method of http_redirect($url); which needs the PECL package pecl to be installed.

5. Helper Functions

This function doesn't incorporate the 303 status code:

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

This is more flexible:

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

6. Workaround

As mentioned header() redirects only work before anything is written out. They usually fail if invoked inmidst HTML output. Then you might use a HTML header workaround (not very professional!) like:

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

Or a JavaScript redirect even.

window.location.replace("https://example.com/"); 
like image 50
24 revs, 15 users 65% Avatar answered Oct 21 '22 14:10

24 revs, 15 users 65%


Use the header() function to send an HTTP Location header:

header('Location: '.$newURL); 

Contrary to what some think, die() has nothing to do with redirection. Use it only if you want to redirect instead of normal execution.

File example.php:

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

Result of three executions:

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 

Resuming — obligatory die()/exit() is some urban legend that has nothing to do with actual PHP. It has nothing to do with client "respecting" the Location: header. Sending a header does not stop PHP execution, regardless of the client used.

like image 44
vartec Avatar answered Oct 21 '22 13:10

vartec