Computer Forums

Computer Forums (http://www.geekboards.com/forums/index.php)
-   Geek Stuff (http://www.geekboards.com/forums/forumdisplay.php?f=1)
-   -   Smooth 301 redirect php script (http://www.geekboards.com/forums/showthread.php?t=755)

yetanotherfcw 04-19-2006 04:29 AM

Smooth 301 redirect php script
 
I need a smooth 301 redirect php script. More specifically, I am looking for a script that does the following:

Visitor goes to the page

yourSite1.com/animal/dog/1.html.

The visitor gets 301-redirected to

yourSite2.com/animal/dog/1.html.

How do I do this in php?

Soulwatcher 04-19-2006 05:04 AM

Does it have to be php? You could set this up with apache using htaccess. A simple
Quote:

Redirect permanent /index.php http://www.website2.com/index.php
would do the trick. And it would take less than 2 minutes to set it up.

yetanotherfcw 04-19-2006 05:17 AM

php or .htaccess.

Well actually, I need to remap number of pages.

Soulwatcher 04-19-2006 05:27 AM

Quote:

Originally Posted by yetanotherfcw
php or .htaccess.

Well actually, I need to remap number of pages.

I would use .htaccess, but I never tryed to redirect more than one page. So I am unsure if it will work. If you try it let me know how it works out.

Coop 04-19-2006 05:40 AM

If you really want to use php, there are several ways to do it. The simplist is with a straight 301 redirect with

Quote:


<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.domain.org/index.php");
?>

Obviously replacing http://www.domain.org/index.php with the URL you want to redirect to. To use this method, the file must replace the original file you are wanting to redirect from.


A more flexible method is to use a map. The advantage of this is that it has a default URL that redirects, typically, to your home page (prevents loss of traffic when pages are moved or deleted). In addition, the map allows you to effectively redirect from multiple URL's to there new location.

Code:

<?php
$map = array(
'/old/1.html' => '/new/2.html',
'/old/2.php' => '/newlocation/3.html');

if (isset($map[$_SERVER['REDIRECT_URL']])) {
    $new_loc = 'http://' .
              $_SERVER['HTTP_HOST'] .
              $map[$_SERVER['REDIRECT_URL']];
    if (isset($_SERVER['REDIRECT_QUERY_STRING'])) {
        $new_loc .= '?' .
                    $_SERVER['REDIRECT_QUERY_STRING'];
    }
    header("Location: $new_loc");
} else {
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: ".$_SERVER['HTTP_HOST']);
}
?>


You should save this as error.php in the root directory of your site, and then add an .htaccess file with the following directive :

ErrorDocument 404 /error.php

That is just to handle 404 errors, you can also add additional error codes if you wish. With this script, if there is no map for the missing page, then you get 301 redirected to the home page of the site. However, if the missing page is one of the pages mapped in the map array, the script will 301 redirect you to that page instead.

These scripts are most useful when the new loocation on your site does not mirror the structure of the original location.

HTH

yetanotherfcw 04-19-2006 05:43 AM

Quote:

Originally Posted by Soulwatcher
I would use .htaccess, but I never tryed to redirect more than one page. So I am unsure if it will work. If you try it let me know how it works out.

Ok, well, I get the feeling that it might be easier to write a short php script to do this.

Coop 04-19-2006 06:02 AM

Oops, just spotted a typo, and I can't edit the original post. Please ignore the above script and use :-

Code:

<?php
$map = array(
'/old/1.html' => '/new/2.html',
'/old/2.php' => '/newlocation/3.html');

if (isset($map[$_SERVER['REDIRECT_URL']])) {
    $new_loc = 'http://' .
              $_SERVER['HTTP_HOST'] .
              $map[$_SERVER['REDIRECT_URL']];
    if (isset($_SERVER['REDIRECT_QUERY_STRING'])) {
        $new_loc .= '?' .
                    $_SERVER['REDIRECT_QUERY_STRING'];
    }
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: $new_loc");
} else {
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: ".$_SERVER['HTTP_HOST']);
}
?>

instead. I missed out the header line in the original.


Also, it is possible to use .htaccess to redirect all files in one location to another, providing the directory structure of the destination remains the same. But the last time I tried that, I got lots of odd problems occuring with other SEO rules in the .htaccess file, so I changed to using the php script instead, which is much easier to maintain IMO.

yetanotherfcw 04-19-2006 06:41 AM

This doesn't work well if there are a couple of thousand pages to redirect, does it?

Coop 04-19-2006 06:59 AM

Not for a simple domain redirect, no. Sorry, I should have given you the exact code to use. I got myself muddled as to what you actually wanted. I would try this :-

Code:


<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.domain.org".$_SERVER['REQUEST_URI']);
?>

Replacing domain.org with the destination domain. This will work for all ordinary GET requests, but would require further work if you wanted it to deal with POST requests as well.

ErikBam 02-06-2009 03:45 AM

Smooth 301 redirect php script
 
This doesn't work well if there are a couple of thousand pages to redirect, does it?


All times are GMT -5. The time now is 01:39 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
HTML Help provided by HTML Help Central.