Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I have currently updated a site and made many improvements to it. The old site ran off 3 different systems and had wordpress (and the other systems) in the webroot. I have moved wordpress into a subdirectory (wordpress) and I also updated my blog posts to be prefixed with blog/. Pages and the front page are not prefixed with blog/.

The issue I am having is that I want to gracefully tell Google and other search engines that these posts are now prefixed with /blog/.

I used the following code in my 404 page before I realized that wordpress throws a 404 header. Obviously, this is not the correct way to implement this fix.

// Check if old site URL and redirect if so
if (substr($s, 0, 8) != 'reviews/') {
    if (substr($s, 0, 5) != 'blog/' && substr($s, 0, 10) != 'wordpress/' ) {
        // Force our 301 redirect so we can keep the new URI: /blog/
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: /blog/{$s}");
        exit();
    }
}

What I need to do is find out when wordpress knows this is a 404 and see if it matches my checks (currently what is in the snippet above) and if a match occurs force a 301 redirect to update the crawlers.

I am not sure if this information is available on init, as this is my next step to test.

I tried playing with template_redirect and redirect_canonical but they don't seem to be the correct methods to attach to.

Any help on this is appreciated. I am still trying to find a solution and will post back when I find one.

Thanks in advance.

share|improve this question
add comment

1 Answer 1

up vote 1 down vote accepted

If you intend to do checks based on template tags you should hook on wp action. template_redirect will suffice too, but wp is earlier. This is when WP handles 404 itself. To perform a 301 redirect use status_header( 301 );, wp_safe_redirect(); immediately followed by exit;

You could use a plugin handle these for you. It's bit tricky to set-up if you are not that technical. Good luck.

share|improve this answer
    
Thanks, wp worked perfectly –  Jeremy Nov 7 '12 at 19:19
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.