Ah, that explains why I wasn’t getting 404s, I was testing on your live website.
In the meantime, allow me to comment on your .htaccess 
RewriteBase /
RewriteBase is only needed to undo any effects of Redirect* directives. Since you don’t have any of those, you can (and should) remove this line.
# Rewrite any calls to *.html, *.json, *.xml, *.atom, *.rss, *.rdf or *.txt if a folder matching * exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !public[COLOR="Red"]/[/COLOR]
RewriteCond %{DOCUMENT_ROOT}/public/$1.$2 !-f
RewriteRule (.+)\\.(html|json|xml|atom|rss|rdf|txt)$ $1/ [L]
Remove the / in red to make the test a bit broader. Also, why is the
RewriteCond %{DOCUMENT_ROOT}/public/$1.$2 !-f
in there? What is that supposed to do?
# Add a trailing slash to directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\\.)
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ([^/]+)$ $1/ [L]
That block is kinda clumsy to be honest. If it’s not a file and not a directory, who cares if it contains a dot? I would remove that line.
Also, the RewriteCond can be incorporated in the RewriteRule by ending that one in a /
Thus:
# Add a trailing slash to directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
[COLOR="Red"]RewriteCond %{REQUEST_URI} !(\\.)
RewriteCond %{REQUEST_URI} !(.*)/$[/COLOR]
RewriteRule ([^/]+)[COLOR="PaleGreen"][B]/[/B][/COLOR]$ $1/ [L]
Remove lines in red, add / in green
# Rewrite any calls to /* or /app to the index.php file
RewriteCond %{REQUEST_URI} /app/$
RewriteRule ^app/ index.php [L]
You don’t need app in both the RewriteCond and the RewriteRule, that’s superfluous. Plus, I would remove the / at the end of ^app/ in the rule (in case someone browses to [noparse]yourdomain.com/app[/noparse] without the trailing slash. Okay, the trailing slash is added by the rule above so it will always be there, but just in case you ever remove the slash-adding rule and forget to amend this one I would do it anyway
# Rewrite any calls to /* or /app to the index.php file
[COLOR="Red"]RewriteCond %{REQUEST_URI} /app/$[/COLOR]
RewriteRule ^app[COLOR="Red"]/[/COLOR] index.php [L]
(again, remove red)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ index.php?$1 [L]
This works, but there is a more effecient way that doesn’t need to create backreferences and is thus slightly faster.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? index.php?%{REQUEST_URI} [L]
Lastly,
# Rewrite any file calls to the public directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !public/
RewriteRule ^(.+)$ public/$1 [L]
Same reasoning as the block above:
# Rewrite any file calls to the public directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !public[COLOR="Red"]/[/COLOR]
RewriteRule .? public/%{REQUEST_URI} [L]
