Link to home
Start Free TrialLog in
Avatar of fionafenton
fionafentonFlag for United Kingdom of Great Britain and Northern Ireland

asked on

Redirect url with query string

Moving a site to Wordpress and have a specific old url that I want to redirect to new page with 301

The old page that I want to redirect is
www.mydomain.co./property/region/Brittany/type.php?ss=Brittany&tt=Gites%20Complex&var1=mls&var=type
And I want it to redirect to
www.mydomain.com/property/search/Cotes-dArmor_Finistere_Ille-et-Vilaine_Morbihan/p/p/b/Gites-Complex/l/a/

I think because of some rewrite rules I have added, the old page isn't currently producing a 404
It's redirecting to
www.mydomain/property/region/Brittany/type.php/?ss=Brittany&tt=Gites%20Complex&var1=mls&var=type
The difference is the forward slash after type.php

I'm pretty sure it's some existing rewrite rules I've set up that are causing this. These are
add_rewrite_rule( 'property/region/([^/]+)/([^/]+)/?', 'index.php?&page_id=69695&mls=$matches[1]&pageno=$matches[2]', 'top');
add_rewrite_rule( 'property/region/([^/]+)/?', 'index.php?&page_id=69695&mls=$matches[1]', 'top');

I don't seem to be able to overwrite these rules for this specific url

I've tried
add_rewrite_rule( 'property/region/Brittany/type.php?ss=Brittany&tt=Gites%20Complex&var1=mls&var=type?', 'index.php?&page_id=70318&mls=Cotes-dArmor_Finistere_Ille-et-Vilaine_Morbihan&minp=p&maxp=p&beds=b&type=Gites-Complex&minl=l&area=a', 'top');

I've also tried adding this to top of .htaccess file
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^ss=Brittany&tt=Gites%20Complex&var1=mls&var=type$ [NC]
RewriteRule ^/property/region/Brittany/type.php$ http://www.mydomain.com/property/search/Cotes-dArmor_Finistere_Ille-et-Vilaine_Morbihan/p/p/b/Gites-Complex/l/a/? [R=301,L]
</IfModule>

I'm sure it's something very minor that I've got wrong, but I just can't spot it.
Avatar of Steve Bink
Steve Bink
Flag of United States of America image

For your RewriteCond, the '%' character is special, denoting a backreference.  Escape it:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^ss=Brittany&tt=Gites\%20Complex&var1=mls&var=type$ [NC]
RewriteRule ^/property/region/Brittany/type.php$ http://www.mydomain.com/property/search/Cotes-dArmor_Finistere_Ille-et-Vilaine_Morbihan/p/p/b/Gites-Complex/l/a/? [R=301,L]
</IfModule>

Open in new window


Also, try to use a code block when posting file contents.  It makes it much easier to read.
Avatar of fionafenton

ASKER

Unfortunately that hasn't worked. It's still redirecting to www.mydomain/property/region/Brittany/type.php/?ss=Brittany&tt=Gites%20Complex&var1=mls&var=type
It's just adding the forward slash after type.php

I removed all my redirects so that I would get a 404 for the page (leaving in the one for property/search/). I then added this to top of .htaccess file
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^ss=Brittany&tt=Gites\%20Complex&var1=mls&var=type$ [NC]
RewriteRule ^/property/region/Brittany/type.php$ http://www.mydomain.com/property/search/Cotes-dArmor_Finistere_Ille-et-Vilaine_Morbihan/p/p/b/Gites-Complex/l/a/? [R=301,L]
</IfModule>

Open in new window

And I'm still getting a 404. So there must still be still be something wrong with the above code.
Light up you rewrite log and post results of a single browse attempt.
I don't have access to create a rewrite log.
That makes things much more difficult.

A couple more things you can try:

1) Add the [NC] flag to your RewriteRule.  You have mixed-caps in that rule, so that could have an effect.

2) Remove the RewriteCond entirely and verify the RewriteRule by itself is picking up the request.  If it works, add pieces of the query string test back in one by one, testing for failure each time.  Remember that RewriteCond is not a token parser... it will execute a literal match.  E.g., "&var1=mls&var=type" will not match "&var=type&var1=mls".
I'm pretty sure the RewriteRule isn't getting processed up at all. What I think is happening is that my Wordpress add_rewrite_rule is taking precedence. My understanding is that if I place my RewriteRule at the top of the .htaccess file then this would be processed before the Wordpress ones, but this obviously isn't happening.
ASKER CERTIFIED SOLUTION
Avatar of Steve Bink
Steve Bink
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
It's working!
Thank you so much for all your help.