Search code examples
.htaccesshttp-redirecthttp-status-code-301

Using regular expression in htaccess for 301 redirects


I have a Wordpress blog where I am redirecting blog posts from my old blog to my new blog in the format below:

The old blog is called 'News' and the new blog is simply called 'Blog' - both exist on the same domain in a subdirectory as indicated below.

OLD 'News' blog structure

http://www.example.com/news/new-android-os-3431

NEW 'Blog' blog structure

http://www.example.com/blog/new-android-os

Essentially this redirect needs to do 2 things:-

  1. Redirect to 'blog' directory
  2. Retain the post name in the same structure but remove the last set of numbers at the end of the URL

I have around 900+ posts that I need to setup redirects for - I know I could manually add each one in but that would take some time. Could anyone indicate if this could be using an regular expression directly within the htaccess file to minimise this process?

My htaccess currently looks like this:

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

Solution

  • Using mod_alias:

    RedirectMatch 301 ^/news/(.+?)(-[0-9]+)?$ /blog/$1
    

    or using mod_rewrite:

    RewriteEngine On
    RewriteRule ^news/(.+?)(-[0-9]+)?$ /blog/$1 [L,R=301]