• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 251
  • Last Modified:

Build a catchstring to redirect pages

I have a site that has lost some pages. I am trying to catch the strings in old url from search engines and redirict them to the new replacement page. I am not sure if I am going the right direction with my code. And I have a provlem with url's that are a directory deep.

Here is what I am using:

function stripstuff( $string )
{
  $string = str_replace ( '/', '', $string );
  $string = split ( '[?]', $string );
  strtolower(trim($string[0]));
  return $string[0];
}

    $theFile = $_SERVER["REQUEST_URI"];
     if ($theFile == "/" || $theFile == "") 
    {
        // If nothing redirect to home page
        header('Location: index.php'); 
    } 
    else 
    {
        $theFile2 = stripstuff($theFile);
        query database for matching string
        if ($num_rows > '0')
        {
            while ($rowID = mysql_fetch_array($result))
            {  
                $ArticleCkID = $rowID['ArticleID'];
            } 
        }
        else
        {
            header('Location: site-map.php'); 
        }

Open in new window


I have 3 questions/issues:
1. Is this the best way to achieve this?
2. When there is a sub-folder (www.domain.com/articles/this-is-the-file.php) the catch string has to be "articlesthis-is-the-file.php" for it to find the proper file
and
3. It doesn't show images bacause it is not in the proper folder level.
0
Jeff
Asked:
Jeff
  • 6
  • 4
1 Solution
 
Ray PaseurCommented:
Have you got this in a 404 handler script?

I think I would do it by having a table of relationships - old URL to new URL.

0
 
JeffAuthor Commented:
Thanks Ray,
Yes and Yes. That is exactly what I am doing.
The problem I am having is with the "/". When I remove it ($string = str_replace ( '/', '', $string );
) I am assuming the file to look for will be www.domain.com/file.php. It strips it to file.php. However if it is www.domain.com/folder/file.php it strips it to "folderfile.php". It then is looking for the images from the "www.domain.com/folder/" folder level and no images show.
0
 
JeffAuthor Commented:
As well as looking for "folderfile.php" that doesn't exist.
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
Ray PaseurCommented:
OK, let me ask the obvious question... Why are you removing the directory separators?  Why not just translate $_SERVER["REQUEST_URI"] directly?
0
 
JeffAuthor Commented:
$_SERVER["REQUEST_URI"]  grabs everything after the .com. "/file.php" or "/folder/file.php".


	function stripstuff( $string )
	{
	  $string = str_replace ( '/', '', $string );
	  $string = split ( '[?]', $string );
	  strtolower(trim($string[0]));
	  return $string[0];
	}

	$theFile = $_SERVER["REQUEST_URI"];
if ($debug) { echo "URI = " . $_SERVER["REQUEST_URI"] . "<br />"; }
	if ($theFile == "/" || $theFile == "") 

Open in new window

0
 
Ray PaseurCommented:
Yes, exactly.  It contains PHP_SELF plus the query string.  Maybe I am not understanding how your site has been re-organized, but it would seem to me that you could use PHP_SELF or REQUEST_URI to perform a lookup of the new URL, then redirect.  Here is the code for one of my catch-all 404 handlers.  It lets you have both of these URLs wind up in the same place"

example.com/script
example.com/script.php

Not very sophisticated but it will work for these, too.

example.com/script/foo
example.com/script/foo.php
<?php // 404handler.php
error_reporting(E_ALL);

if (isset($_SERVER["REQUEST_URI"]))
{
    // IF A PHP SCRIPT IS NOT FOUND GO TO THE HOME PAGE
    if (preg_match('#\.php#i', $_SERVER["REQUEST_URI"]))
    {
        header('Location: /');
        exit;
    }

    // IF A NON-PHP SCRIPT IS NOT FOUND, TRY IT WITH PHP
    $arr = explode('?', $_SERVER["REQUEST_URI"]);
    $arr[0] .= '.php';
    $uri = implode('?', $arr);
    header("Location: $uri");
    exit;
}

// IF NO REQUEST URI
header('Location: /');
exit;

Open in new window

0
 
JeffAuthor Commented:
Thanks Ray, I will use some ot that code.

I still have one problem,

When grabbing the url, a folder in between makes it hard to do a search.
Example:
$_SERVER["REQUEST_URI"] for www.somain.com/foldername/filename.php returns "/foldername/filename.php".

How would I trim this to just "filename.php" so I can search to see if that page exists in my database?
0
 
Ray PaseurCommented:
You can use basename()
http://us2.php.net/manual/en/function.basename.php

But you might consider the design pattern of something like this:
www.domain.com/tom/index.php
www.domain.com/ray/index.php

Tom and Ray might not have exactly the same index.php -- just a thought.

0
 
JeffAuthor Commented:
What I have is a site that was shut down for about a week. I can look up on google and view the cached pages. Problem is they are shtml. So I am building a catchstring script. I view the cached page, build a new page. Some pages are in the main directory and some are in sub directories. I am trying to strip the subdirectiory then redirect to a page created from the cache.

Does that help to make sense?
0
 
JeffAuthor Commented:
basename() works perfect!

Thanks Ray.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 6
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now