Skip to content

Instantly share code, notes, and snippets.

@iheartmedia-matt
Created August 15, 2018 14:46
Show Gist options
  • Star 25 You must be signed in to star a gist
  • Fork 9 You must be signed in to fork a gist
  • Save iheartmedia-matt/253ccb6183fdeaa5619f615f2cb5a58b to your computer and use it in GitHub Desktop.
Save iheartmedia-matt/253ccb6183fdeaa5619f615f2cb5a58b to your computer and use it in GitHub Desktop.
Apache .htaccess SSL React Router
<ifModule mod_rewrite.c>
#######################################################################
# GENERAL #
#######################################################################
# Make apache follow sym links to files
Options +FollowSymLinks
# If somebody opens a folder, hide all files from the resulting folder list
IndexIgnore */*
#######################################################################
# REWRITING #
#######################################################################
# Enable rewriting
RewriteEngine On
# If its not HTTPS
RewriteCond %{HTTPS} off
# Comment out the RewriteCond above, and uncomment the RewriteCond below if you're using a load balancer (e.g. CloudFlare) for SSL
# RewriteCond %{HTTP:X-Forwarded-Proto} !https
# Redirect to the same URL with https://, ignoring all further rules if this one is in effect
RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [R,L]
# If we get to here, it means we are on https://
# If the file with the specified name in the browser doesn't exist
RewriteCond %{REQUEST_FILENAME} !-f
# and the directory with the specified name in the browser doesn't exist
RewriteCond %{REQUEST_FILENAME} !-d
# and we are not opening the root already (otherwise we get a redirect loop)
RewriteCond %{REQUEST_FILENAME} !\/$
# Rewrite all requests to the root
RewriteRule ^(.*) /
</ifModule>
<IfModule mod_headers.c>
# Do not cache sw.js, required for offline-first updates.
<FilesMatch "sw\.js$">
Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>
</IfModule>
@seksitha
Copy link

Thank you very much!!! save my day! and learn a lot from this!!!

@steve-cahn
Copy link

steve-cahn commented Nov 13, 2019

Thank you! Just spent the past 4 hours trying to get this!!! Beautiful!

Just one question... How can I redirect a user from www to without the www, so from www.sample.com to https://sample.com?

@yourPixel
Copy link

Thank you very much! I spent a lot of time to find the answer and it's here !

@copperfox777
Copy link

Thank you man

@kurtwilliam
Copy link

Saved me, thanks!!

@BranigansLaw
Copy link

This is amazing! Saved me so much time!

I would also like to remove the "www" from urls and redirect to the non-www counterpart. I'm pretty green with .htaccess, so I'm sure I'm doing something wrong. I tried this and it's not working:

...
  # Enable rewriting
  RewriteEngine On

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

  # If its not HTTPS
  RewriteCond %{HTTPS} off
...

@12aptor
Copy link

12aptor commented May 17, 2021

Thanks. You are so good

@micaelomota
Copy link

For people that serve the react app in a subdirectory, here is the solution:
Comment out or remove out these two lines bellow

    # Rewrite all requests to the root
    # RewriteRule ^(.*) /

Add this rewrite rule to point to index.html

    # Rewrite all requests to the index.html
    RewriteRule ^ index.html [QSA,L]

@jonathanboreljaquet
Copy link

I have an "ERR_TOO_MANY_REDIRECTS" error with all the solutions found, has anyone ever had this problem?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment