Question

Well, I am stuck again. Two days of reading and again, found some close solutions but, nothing fits and all my experiments failed.

This is a continuation of my question: here at stackoverflow

The 4 rules below take my incoming links:

  http://somedomain.com/getme.pl?dothis=display&partnum=1234567

and beatifies it. Also allows users to use the beatified version right in address bar:

http://somedomain.com/1234567

Here are my working rules:

RewriteRule ^([\s]*)$ /getme.pl [L] ## in case there is a space or nothing.
RewriteRule ^([0-9]*)$ /getme.pl?dothis=display&partnum=$1&rewrite [L]
RewriteCond %{QUERY_STRING} partnum=([0-9]*)$
RewriteRule (.*) /%1? [L,R=301]

Works great but, I discovered there are some old links to the site out there:

http://somedomain.com/oldversion.php?id=123456789

And

http://somedomain.com/oldversion.php?r=86this&id=123456789

I would like to just grab the id=[0-9] and integrate it with my working rules. I suppose, the rule would be inserted between the second and third rules above.

I tried various attempts (about 100!) like:

RewriteRule ^(oldversion\.php)?([a-z]{1})=([a-z0-9]*)&([a-z]{2})=([0-9]*)$ /$4? [L]

RewriteRule ^(oldversion\.php)?([a-z]{2})=([0-9]*)$ /$3? [L]

As you see, two days of reading and nothing is sinking in for me. I tried several variations of the working rules I already have as well, to no avail.

Can't I just get the 123456789 off of the outdated .php urls somehow and stick it in my existing rules?

Thanks for your help and explaining down to my level co, I just might be able to understand...

Was it helpful?

Solution

Put this at the end of your .htaccess file:

RewriteCond %{QUERY_STRING} id=([^&]+)(&|$) [NC]
RewriteRule ^oldversion\.php$ /%1? [L,R=301,NC,NE]

For a URI of /oldversion.php?r=86this&id=123456789 it will internally redirect to /123456789

Remember RewriteRule just matches your URI and it cannot match your QUERY_STRING.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top