Jeff
asked on
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:
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.
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');
}
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.
and
3. It doesn't show images bacause it is not in the proper folder level.
ASKER
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.
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.
ASKER
As well as looking for "folderfile.php" that doesn't exist.
OK, let me ask the obvious question... Why are you removing the directory separators? Why not just translate $_SERVER["REQUEST_URI"] directly?
ASKER
$_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 == "")
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
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;
ASKER
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?
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?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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?
Does that help to make sense?
ASKER
basename() works perfect!
Thanks Ray.
Thanks Ray.
I think I would do it by having a table of relationships - old URL to new URL.