This week I had to help a friend with his new small ReacJS website running on Apache.
His problem was that URIs which does not exist the Apache was returning as 404 pages, he needed a common rule used by a lot of PHP frameworks, Rewrite all URIs which are not Files or Directories to /index.html
Example URL www.example.com/myprofile
to actually load www.example.com/index.html
and let the ReactJS route do his work and show what it needs.
In that case, you might write something like this:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.html [L]
What is this doing, it will check the URI either exists as a file or is a directory, if it is NOT, it will call index.html. The [L] means that this will be the LAST match and will stop there, will not continue if we have other rules below that.
This is code is ok, not so simple and you can mess up the conditions, for example, I have seen a lot of [OR] next to RewriteCond %{REQUEST_FILENAME} !-f [OR]
which will not work in our case above.
If you need this simple Rewrite rule, you might use Apache command available after 2.2.16 version
FallbackResource /index.html
This will do the same as the above 4 lines if the URI is not found on the server, ie. not a File or a Dir, it will load to /index.html
This command is not part of modrewrite, but of moddir, if you don’t have it enabled, run sudo a2enmod dir
and restart the Apache.