Old blog/ and blog/feed/ URLs not working after moving blog to top-level via .htaccess

For a long time I served my blog from http://www.murrayc.com/blog/, with the wordpress installation in /home/murrayc/murrayc.com/blog/. Now I’ve moved it to http://www.murrayc.com/, without moving the wordpress installation on the filesystem.

I did that by:

Read More
  • Changing the “Site Address (URL)”, in Settings->General, to http://www.murrayc.com. I kept the “WordPress Address (URL)” as http://www.murrayc.com/blog

  • Adding a RedirectRule in my top-level .htaccess at /home/murrayc/murrayc.com/, so that, for instance, permalink/something could be used instead of blog/permalink/something. The older blog/permalinks still seem to work too.

However, some old links are not working.
http://www.murrayc.com/blog/ takes you to a page that happens to mention blogs, presumably via WordPress’s attempt to guess what you want. Likewise, http://www.murrayc.com/blog/feed takes you to the comments feed for one old blog post.

With the rules added by WordPress (after changing the “Site Address URL”, I think), this is my .htaccess file:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/temp
RewriteRule ^(.*)$ blog/$1 [L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

I’m using WordPress 3.5.1, the latest release, via Dreamhost’s 1-click install, which updates automatically.

This feels like a bug in WordPress. Maybe it’s misinterpreting URLs that it gets at some point that contain blog/blog.

Related posts

Leave a Reply

2 comments

  1. You can skip the first Part of your .htaccess, just use the standard WordPress configuration.

    The main problem is, you need to create a new index.php in the root directory of your webspace, containing the following:

    <?php
    /**
     * Front to the WordPress application. This file doesn't do anything, but loads
     * wp-blog-header.php which does and tells WordPress to load the theme.
     *
     * @package WordPress
     */
    
    /**
     * Tells WordPress to load the WordPress theme and output it.
     *
     * @var bool
     */
    define('WP_USE_THEMES', true);
    
    /** Loads the WordPress Environment and Template */
    require('./blog/wp-blog-header.php');
    ?>
    

    You also need to create a .htaccess file in your root directory, containing the standard WordPress .htaccess, and then everything should work fine.

  2. You might want to use 301 redirects, as now there is no blog directory, but it is assumed to be as root.
    You have to inform server that these are old urls and should be matched to new one’s. You can do this using .htaccess as code below,

    //301 Redirect Old File
    Redirect 301 http://www.murrayc.com/blog http://www.murrayc.com/
    Redirect 301 http://www.murrayc.com/blog/feed http://www.murrayc.com/feed
    

    also there are plugins for these.