I have a basic CMS in PHP/MySQL where content managers can create pages to the system for public viewing. Each page is then available at an url such as http://www.example.com/pages.php?pid=123
Now, I want to redirect requests to http://www.example.com/pages.php?pid=123 to http://www.example.com/pages.php?pid=456.
I’ve already removed the pid=123 page from the db but because of the cms code the site still returns a 202 when some one tries to access the page. I thought I could use a 301 redirect in .htaccess to make the redirect work, i.e.:
redirect 301 pages.php?pid=123 http://www.example.com/pages.php?pid=456
but this doesn’t work, Apache still return 202 when trying to fetch the pid=123 page. Also, I’ve tried using mod_rewrite, but it doesn’t work:
RewriteRule ^pages.php?pid=123$ pages.php?pid=456 [R=301,L]
Any ideas what could be wrong and how I can fix the 301 redirect?
You can perform the redirect in PHP (which probably knows more about what to redirect where) using
header().Please note that
?is a special character used by regular expressions, so your regex matchespages.phppid=123andpages.phppid=123.Even then, I don’t think the query string (including the
?pid=123part) is used in the URL handled byRewriteRule, so you would need to use something like:This shouldn’t work as is, but it should give you some ideas.