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

只谈情不闲聊 提交于 2019-12-21 20:25:10

问题


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 folder.

i want to

  • www to non on all URLs < below code DID it :)
  • Remove index.html from url < below code DID it :)
  • Remove all .html extension / Re-direct 301 to url without .html extension < below code DID it :)
  • Add trailing slash to the static webpages / Re-direct 301 from non-trailing slash << I NEED HELP WITH THAT
  • Force trailing slash to the Wordpress Webpages / Re-direct 301 from non-trailing slash < below code DID it :)

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]

    #html
    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] 
    </IfModule> 

    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /blog/
    # Force Trailing Slash for wordpress
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)[^/]{1}$ %{REQUEST_URI}/ [L,R=301]
    </IfModule> 

The above code do

  1. redirect www to non-www
  2. Remove trailing slash at the end (if exists)
  3. Remove index.html
  4. Remove all .html
  5. Redirect 301 to filename without trailing slash at the end
  6. Force Trailing Slash for wordpress and redirect 301 from non trailing slash at the end

EDIT

#removing trailing slash Rule usage


回答1:


Have it this way for site root .htaccess:

<IfModule mod_rewrite.c> 
Options +FollowSymLinks -MultiViews

RewriteEngine On 
RewriteBase /

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

RewriteCond %{THE_REQUEST} \s/+(.+?)\.html/?[\s?] [NC]
RewriteRule ^ /%1/ [R=301,NE,L]

#index redirect 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ 
RewriteRule ^index\.html$ http://%{HTTP_HOST}/ [R=301,L]

# add a trailing slash to non files
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L,R=301,NE]

# add html internally
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^.]+)/$ $1.html [L]

</IfModule>

Make sure to clear your browser cache before testing.




回答2:


RewriteEngine On 

RewriteBase /   

WWW to Non

RewriteCond %{HTTP_HOST} ^www.domain\.tld$ [NC]

RewriteRule ^(.*)$ http://domain.tld/$1 [L,R=301]

Remove index.html from url

RewriteRule ^index.html$ / [L,R=301]

Remove all .html extension / Re-direct 301 to url without .html extension

RewriteRule ^([a-zA-z0-9]+).html$ /$1   [L,R=301]

Add trailing slash to the static webpages / Re-direct 301 from non-trailing slash

RewriteRule ^([a-zA-z0-9]+).html$ /$1/   [L,R=301]

Force trailing slash to the Wordpress Webpages / Re-direct 301 from non-trailing slash

RewriteRule /blog/([^/]+) /blog/$1/ [L,R=301]


来源:https://stackoverflow.com/questions/38733574/6-htaccess-rewrites-remove-index-html-remove-html-force-non-www-force-trai

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!