You should be able to do a redirect of the URL and query using:
Redirect 301 "/123/456/?postname=example" http://www.yourwebsite.com/890/example/
Or you can use a redirect match to redirect all URL in a folder such as:
RedirectMatch 301 ^/123/456/(.*)$ http://www.yourwebsite.com/890/example/$1
Thanks Choc, but that's where I started . . . with no success. I think the standard "Redirect 301" line is hiccuping on the query string. And I would like to do this one URL at a time, for some other reasons, so the second option would be a last resort.
Hmm, that can be frustrating because it shouldn't. You did include the "" (quotations) in your attempts right?
Mod_Alias only "sees" the URL-path, not the query_string. To match the query_string you'll need to use Mod_Rewrite with a RewriteRule [to match the URL-path] and RewriteCond [to match the query_string].
There are some tutorials in the Library [webmasterworld.com] that should explain some things better than I have time for right now -- I recommend starting with Beginning Mod_Rewrite + Mod_Rewrite and Regular Expressions near the bottom of the page.
extracting "example" from the query string of the requested url to insert into the substitution string is the easy part.
how are you going to generate the "890"?
Thanks all. I will try some of these things and report back.
If you have WordPress, your htaccess already uses mod_rewrite. That means you have to use mod_rewrite for all redirects, including conditionless path-only ones that could otherwise be done in mod_alias (Redirect by that name). In fact, if you've got any redirects using mod_alias, translate them to mod_rewrite format.
Is it always /890/ ? If not, you have to either detour to a php script or-- if only a few pages are involved-- code separate explicit redirects for each.
The first question to ask is how many URLs are you wanting to redirect. Is it only a few or is it hundreds or thousands?
The next question is are all the URLs that will be redirected already created? That is, do you want to redirect only URLs that already exist, or will this rule need to cater for additional URLs in the future?
Is the "890" part common to all of the new URLs, or does it vary depending on what is in the URL request that you want to redirect?
Is the /123/456/ part constant in all the requested URLs, or does it also vary?
Lucy - it is always /890/
g1 - It's only a couple dozen URLs. All URLs are already created, just need a one time fix. 890 is common. 123/456 is also constant.
No need for complicated stuff here. You'll just need one RewriteRule for each affected URL.
Each Rule will also need a preceding RewriteCond looking at THE_REQUEST to validate the requested query string.
If the part of the old URL that varies is the same string as used in the part of the new URL that varies, you might be able to use a single RewriteCond/RewriteRule pair for the whole lot.
[edited by: g1smd at 9:09 pm (utc) on Sep 25, 2013]
OK, now let's lay out in English what the pattern is. Is there any relationship between old URL and new URL? "A couple dozen" is borderline: If you had to do them all manually it could be done in htaccess without unreasonably slowing the server, but it would also be worth the trouble of putting together a php page.
Always 890. Good. But what about the 123/456 part? Will there also be requests in the form
that you DON'T want to redirect?
In general you need to show at least two examples before you can pick out the pattern and devise a rule.
:: vague mental association with longago JIR article about single-trial learning in the domestic darning needle ::