When I first set-up my WordPress blog, I used the default permalink structure. For example:

http://milestoneinc.com/blogs/tech_blog/?p=79

I liked it because it kept the URL's short. But, I came to understand the SEO benefits of readable URL's. And the default structure made interpreting my Google Analytics reports a chore. So, I decided to change the structure to one that just used the name of the post:

/%postname%

And this works fine. You go into your Permalink Settings screen, specify the Custom Structure, save the .htaccess file, and the above URL changes:

http://milestoneinc.com/blogs/tech_blog/migrating-your-wordpress-permalinks

But, I could still access the old URL directly. This wasn't cool to me, because the search engines would still drive visitors to the old link structure, Google Analytics would still show the obtuse links, and my URL's would remain search-engine hostile. What I wanted to do was migrate the old URL's to the new URL's. It turns out that there are lots of WordPress plugins offering to do this for you. After much investigation and reading, the one I finally settled on was the Permalink Redirect WordPress Plugin by Scott Yang. Why? Primarily because of this thorough blog post about the Permalink Redirect Plugin by Michael Bubbo.

I followed the instructions and everything worked as expected. And when I look in my Apache access logs, I see the 301 redirect goodness that I expected:

12.345.678.999 - - [26/Aug/2010:02:37:58 -0500] 
"GET /blogs/tech_blog/?p=76 HTTP/1.1" 301 4224 "-"
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"
12.345.678.999 - - [26/Aug/2010:02:37:58 -0500] 
"GET /blogs/tech_blog/migrating-your-wordpress-permalinks HTTP/1.1" 200 3798 "-"
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"

I hope this helps.