Redirecting old .html page to new without html extension page?

I’ve just changed permalinks in my wordpress site.

And my old links were like that,

Read More
http://www.sitename.com/category/postname.html

Now new links are

http://www.sitename.com/category/postname/

I’m getting 404 error at old links, how can i redirect all .html pages to new non .html pages with .htaccess?

Related posts

Leave a Reply

3 comments

  1. In the htaccess file in your document root, add these before your wordpress rules:

    RedirectMatch 301  ^/([^/]+)/([^/.]+).html$ /$1/$2/
    RedirectMatch 301  ^/([^/]+)/([^/]+)/([^/.]+).html$ /$1/$2/$3/
    

    Of if you need to limit it by hosts, you can use mod_rewrite:

    RewriteCond %{HTTP_HOST} sitename.com [NC]
    RewriteRule ^([^/]+)/([^/.]+).html$ /$1/$2/ [R=301,L]
    
    RewriteCond %{HTTP_HOST} sitename.com [NC]
    RewriteRule ^([^/]+)/([^/]+)/([^/.]+).html$ /$1/$2/$3/ [R=301,L]
    
  2. The accepted answer (above) from Jon Lin caused some issues for me.
    This is my result, which works well, and is a bit more compact.

    It works for both, with and without directories in the path.

    Oneliner:

    RedirectMatch 301  ^/(.*).html$ /$1
    

    Or if you need it limited by host:

    RewriteCond %{HTTP_HOST} myDomain.com [NC]
    RewriteRule ^(.*).html$ /$1 [R=301,L]
    

    Example:
    enter image description here