[TYPO3] mod_rewrite - Mass Redirection Help Needed (I'm Desparate!)

Oliver Rowlands oliver at liquidlight.co.uk
Wed May 23 22:17:42 CEST 2007


Hi Timothy,

It seems you didn't look hard enough. I suggest you have a look at 
Apache's mod_rewrite rewrite maps[1]. I've used them in the past to 
migrate sites with 1000's of pages to Typo3.

Let me know if you want more information on how to set this up.

Regards,

Oliver

[1] http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteMap

Timothy Patterson wrote:
> We are moving away from a CMS that utilizes URLs in the form of 
> "http://www.domain.com/its/index.cfm?doc_id=10" in favor of Typo3.
> 
> I have RealURL working perfectly (great job devs!) and I am quite 
> satisfied with my setup.
> 
> My problem is the fact that I have to keep all of the old URLs valid on 
> my site.  Due to the 1000s of pages on my site I would like to implement 
> a type of redirection database to keep the old URLs valid while 
> increasing manageability of the redirections.
> 
> After doing some research online, I have found that there is no 
> clean-cut way to redirect a URL in the style that our old CMS uses.
> 
> Example:
> You can only redirect "http://www.domain.com/its/index.cfm" to any URL. 
>  You cannot redirect "http://www.domain.com/its/index.cfm?doc_id=10" to 
> a URL and "http://www.domain.com/its/index.cfm?doc_id=20" to a different 
> URL.  Catch my drift?  "Standard" redirects only allow you to match file 
> names and not the parameters after the file name.
> 
> My solution was to create a MySQL database, then use a combination of 
> mod_rewrite with PHP.
> 
> If you view my sample .htaccess file and PHP script below, you can see 
> my problem...  My setup works great except for the fact that I get a 
> ?myredirect=0 appended to every single URL on my site.  I've played with 
> mod_rewrite for hours to try to get rid of that, but it seems to be the 
> only way to avoid an infinite rewriting loop (it is the only way I can 
> communicate from the PHP script back to mod_rewrite).  I really don't 
> want the ?myredirect=0 on every page.
> 
> Does anyone have any suggestions?  Any better ways of accomplishing this 
> goal?  Does anyone know of any other mass redirection solutions?  Any 
> other hybrid PHP / mod_rewrite possibilities?  Am I just crazy?
> 
> If I can get some help I'd be glad to write up a How-to doc that will 
> help others migrating away from a different CMS.
> 
> Here is what I have so far...  (It works, just adds a ?myredirect=0 to 
> every page's url.  Grr!)
> 
> mod_rewrite (in a .htaccess file):
> RewriteEngine On
> RewriteCond %{QUERY_STRING} !(myredirect)
> RewriteRule .* /redirect.php?dbredirection=%{REQUEST_URI} [L,QSA]
> 
> And my PHP code:
> <?php
> // DB Connectivity Include...
> include "config.php";
> 
> // Reads QUERY_STRING environment variable and grabs everything 'after 
> // dbredirection='
> list($junk, $request) = split("dbredirection=", getenv('QUERY_STRING'));
> 
> // Replace the first instance of a & with a ? (caused by mod_rewrite)
> $request = preg_replace("/(\&)/", "?", $request, 1);
> 
> // Connect to MySQL...
> $connection = mysql_connect($db_host, $db_user, $db_pass);
> mysql_select_db($db);
> 
> // Get today's date in MySQL format...
> $expdate = date('Y-m-d');
> 
> // Build Query...
> // Select & Check Expiration - Default is 2050-01-01 so we should be ok 
> // with this...
> $query = "SELECT newurl FROM redirects WHERE oldurl='$request' AND 
> expires >= '$expdate' LIMIT 1";
> 
> // Execute Query...
> $result = mysql_query($query);
>     
> if(mysql_num_rows($result) != 0)
> {
>     // Retrieve Row...
>     $row = mysql_fetch_row($result);
> 
>     //echo "Redirecting to: $row[0]";
>     //die;
> 
>     // Perform Safe, "Permanent" Redirect...
>     header("HTTP/1.1 301 Moved Permanently");
>     header("Location: $row[0]");
>     die;
> } else {
>     // No entries exist...  Try to go to page...
>     // Add ?myredirect=0 to the URL to prevent mod_rewrite loops!!!
> 
>     // Does $request contain a '?'
>     $qmark = strstr($request, '?');
>     if(!$qmark)
>     {
>         $request .= "?myredirect=0";
>     } else {
>         $request .= "&myredirect=0";
>     }
>        
>     header("Location: $request");
>     die;
> }
> ?>


-- 
Oliver Rowlands
:: Liquid Light ::

E - oliver at liquidlight.co.uk
W - http://www.liquidlight.co.uk

T - 00 44 (0)845 6 58 88 35
F - 00 44 (0)845 6 58 44 35


More information about the TYPO3-english mailing list