Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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
like image 932
Zabs Avatar asked May 21 '13 08:05

Zabs


People also ask

Should I enable 301 .htaccess redirect?

The . Because the WordPress 301 redirect is not always reliable, we recommend issuing the 301 redirect via your . htaccess file. Another benefit is that the . htaccess redirect is slightly faster than redirecting via PHP, because it is loaded even before the rest of the page.

What is a 301 .htaccess redirect?

A 301 Permanent Redirect permanently redirects one URL to another. You set up a 301 redirect using . htaccess to send visitors to a new URL and tell search engines that a page has moved so that the new page can be properly indexed.

What is RegEx in redirection?

A “Regular Expression”, or RegEx, is a set of characters that create a search pattern. It's useful for redirect and SSL rules because it allows us to dynamically match any number of URLs without creating a rule for each and even without knowing what those URLs might all be.


1 Answers

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]
like image 117
Jon Lin Avatar answered Oct 31 '22 05:10

Jon Lin