Search code examples
phphttp-redirecthttp-status-code-301

PHP 301 Redirect - collect referrer


I'm doing a 301 redirect on site A to site B - when the user arrives at site B it needs to find the page the user came from. This doesn't seem to be working though:

$_SERVER['HTTP_REFERER']

whereas if I do a link to the page

<a href="http://site-b.com">go</a>

I get the referrer through. Is there a reason it doesn't come through after the redirect? If so can anyone offer any advice on how to do this. I want to avoid at all costs having a query string on the redirect.

Is there maybe another header I need to send with the page that redirects?

Thanks for any advice!


Solution

  • The thing is, the HTTP_REFERER is site A. That's just how a 301 works.

    That said, the easy way to do this is to take the url of the referrer to site A onto the end of site B's URL as a variable. Then, at site B, any time you have a referral from site A, you can have it.

    <?php
        header("Location: http://site-b.com/?ref="
                .urlencode($_SERVER['HTTP_REFERER']),TRUE,301);
    ?>
    

    Then of course at site B, access urldecode($_GET['ref']) for your referrer.

    However... if you're looking to avoid _GET variables, you have a few options.

    A) Collect the _GET request, then re-munge the URL -- IE have site B redirect to a "clean" version of itself.

    B) Have your redirecting page make a curl or stream_get_contents over to a "collection" page prior to issuing a header(), where you collect and store the any session information (like the refererer) and have it prepared to be processesed when they redirect.