[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