I actually came across this post first before 3 hours of searching through react-router and heroku documentation. For swyx, and anyone else having the same problem, I’ll outline the minimum of what you need to do to get this working.
router.js – (Obviously change AppSplash and AppDemo to your components)
export default <Router history={hashHistory}>
<Route path="https://stackoverflow.com/" component={App}>
<IndexRoute component={AppSplash}/>
<Route path="demo" component={AppDemo}/>
</Route>
</Router>
app.js
import React, { Component } from 'react'
class App extends Component {
static propTypes = {
children: PropTypes.node
}
render() {
const { children } = this.props
return (
<div>
{children}
</div>
)
}
}
export default App
Create a new file in the root of your home directory and name it static.json. Put this into it.
{
"root": "build/",
"clean_urls": false,
"routes": {
"/**": "index.html"
}
}
Push to heroku again. The routes should work this time.
Explanation:
You need to modify Heroku’s default webpack, otherwise the service gets confused with how to handle the client-side routing. Essentially what static.json does. The rest is just the correct way to handle the routing according to the ‘react-router’ documentation.