i’ve to give some information about my website Environment

  1. i have static webpage in the root.

  2. WordPress installed in sub-dictionary www.domain.com/blog/

  3. I have two .htaccess , one in the root and one in the wordpress

i want to

  • www to non on all URLs
  • Remove index.html from url
  • Remove all .html extension / Re-direct 301 to url
    without .html extension
  • Add trailing slash to the static webpages / Re-direct 301 from non-trailing slash
  • Force trailing slash to the WordPress Webpages / Re-direct 301 from non-trailing slash

Some examples

domain.tld/index.html >> domain.tld/

domain.tld/file.html >> domain.tld/file/

domain.tld/file.html/ >> domain.tld/file/

domain.tld/wordpress/post-name >> domain.tld/wordpress/post-name/

My code in ROOT htaccess is

<IfModule mod_rewrite.c> 
Options +FollowSymLinks -MultiViews

RewriteEngine On 
RewriteBase /

#removing trailing slash
RewriteCond %{REQUEST_FILENAME} !-d     
RewriteRule ^(.*)/$ $1 [R=301,L]

#www to non
RewriteCond %{HTTP_HOST} ^www.(([a-z0-9_]+.)?domain.com)$ [NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^.]+)$ $1.html [NC,L]

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

Read more here: 6 .htaccess Rewrites: Remove index.html, Remove .html, Force non-www, Force Trailing Slash


If you know the solution of this issue, please leave us a reply in Comment section, to update the question.

Wordpress related questions and answers: