Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

react production build 404 not found

Tags:

reactjs

apache

Hello i need to deploy react app.

To achieve that i run : "npm run build"

after that in my vhost.conf i've added vhost

<VirtualHost *:80>
ServerName hello.local
DocumentRoot c:/wamp64/www/hello_world/build
<Directory  "c:/wamp64/www/hello_world/build">
             Options Indexes FollowSymLinks MultiViews
             AllowOverride All
             Require all granted
</Directory>

i've also added to etc/hosts hello.local

of course i've enabled mod rewrite in httpd.conf

When i run hello.local/ main page of my react app display properly, but when i want to go to react-react route path hello.local/example i received 404 not found error. Please help what can it be ? It's problem with apache configuration or react-router has some mistake ? Regards

like image 479
Juri Bojka Avatar asked Nov 30 '22 08:11

Juri Bojka


1 Answers

This is a common issue that comes up for SPA. In SPA, mostly the routing happens on client side. In your case, mostly react-router should be doing the job. Since the whole js is bundled as a single file and is served in index.html, you need to serve index.html for all paths that is non-existing in your server.

You have to add a config like this

RewriteEngine On  
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]

RewriteRule ^ /index.html [L]

So, if there is no matching path in your server, the index.html would get served. Then the javascript would execute and react-router(client side routing) will take over and display the correct component for the route.

This is true for most SPA, where the routing happens on client side.

like image 194
Panther Avatar answered Dec 05 '22 04:12

Panther