Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove .html from URLs with a redirect

We have a website, unfortunately all the URLs have the .html suffix, its a Magento installation, Magento allows you to change this on the CMS, but again, unfortunately all this URLs with .html suffix have a good ranking in Google. We need to redirect to non .html.

So, consider the following scenario, we are rebuilding this site from scratch, so we have the same urls on the new site but without the .html suffix.

  • Now is: www.example.de/cool-shoes.html
  • Will be: www.example.de/cool-shoes

So www.example.de/cool-shoes.html will not exist anymore, and I've been trying a redirect with the .htaccess with no luck.

I've tried so far:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule (.*)index\.html$ /$1 [R=301,L] 

and:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

but it doesn't seem to work...any ideas?

like image 472
Kaßta Avatar asked Apr 20 '12 11:04

Kaßta


6 Answers

Ok so, after some research, and failing to achieve this with a rewrite rule, the following line of code worked:

redirectMatch 301 ^(.*)\.html $1

This is quite usefull to remove any url extension and avoid broken links, hopefully helps someone in the future...

cheers!

like image 188
Kaßta Avatar answered Nov 06 '22 02:11

Kaßta


This will rewrite the url like so http://example.com/page.html -> http://example.com/page

# Remove .html from url
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html
like image 33
Joshua Pekera Avatar answered Nov 06 '22 02:11

Joshua Pekera


Try adding the following to the .htaccess file in the root directory of your site redirect URLs with .html extension and remove it.

Options +FollowSymLinks -MultiViews
DirectorySlash Off

RewriteEngine On

RewriteCond %{SCRIPT_FILENAME}/ -d
RewriteCond %{SCRIPT_FILENAME}.html !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [R=301,L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.html$ /$1 [R=301,L]

RewriteCond %{SCRIPT_FILENAME}.html -f
RewriteRule [^/]$ %{REQUEST_URI}.html [QSA,L]
like image 28
Suhas Avatar answered Nov 06 '22 02:11

Suhas


Here's the solution that worked for me.

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

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^(.*)$ $1.html [L]
like image 22
Patrick James McDougle Avatar answered Nov 06 '22 01:11

Patrick James McDougle


Follow the steps, and you'll be able to remove .html from url without modifying .htaccess file.

like image 1
Vikas Avatar answered Nov 06 '22 01:11

Vikas


This should do the trick:

RewriteEngine On
RewriteRule ^(\w+)\.html$ /$1 [R=301,L]
like image 1
ᴘᴀɴᴀʏɪᴏᴛɪs Avatar answered Nov 06 '22 02:11

ᴘᴀɴᴀʏɪᴏᴛɪs