React Routing работает локально, но не на моем веб-хостинге.
У меня есть приложение React, которое отлично работает на моем локальном компьютере, но мой маршрут не работает на моем веб-хостинге (веб-облако OVH).
Я проверил много постов, в которых говорится об этом, и пытался следовать их рекомендациям, но мне кажется, что я что-то упустил
Если я хорошо понимаю, я не могу получить доступ к www.mysite/login
потому что в моем dist
папки нет login.html
,
Поэтому я попытался создать static.json
как это
{
"root": "dist/",
"clean_urls": false,
"routes": {
"/**": "index.html"
}
}
и .htaccess
в моем публичном хранилище
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]
вот мой index.js
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root'))
вот мой App.js
class App extends Component {
render() {
return (
<IntlProvider locale={language} messages={messages}>
<div className="App">
<div className="App-content">
<div className="menu">
<Navbar handleLanguage={langValue => this.langChange(langValue)} language={language} />
</div>
<Main language={language}/>
</div>
</div>
</IntlProvider>
);
а вот мой Main.jsx
export class Main extends React.Component {
render (){
return (
<Switch>
<Route exact path="/" render={(props) => <Home {...props} language={this.props.language}/>} ></Route>
<Route path='/login' component={Login} ></Route>
</Switch>
);
}
}
Я думаю, смогу ли я использовать кнопку, которая делает this.props.history.push('/login')
Я получу доступ к своей странице входа в систему, но на самом деле я не могу сделать такую кнопку на главной странице, но это еще одна проблема.
Ты знаешь, что я что-то упустил или нет? потому что я борюсь с 5 часов, и я думаю, что я проверил каждый пост об этой проблеме, даже официальный документ.
Спасибо за помощь
РЕДАКТИРОВАТЬ:
Я забыл показать свою экспресс-конфигурацию для этого
//app.js
const express = require('express');
const http = require('http');
const path = require('path');
let app = express();
app.use(express.static(path.join(__dirname, 'dist')));
// Handles any requests that don't match the ones above
app.get('/*', (req,res) =>{
res.sendFile(path.join(__dirname, 'dist', 'index.html'));
});
const port = process.env.PORT || '8080';
app.set('port', port);
const server = http.createServer(app);
server.listen(port, () => console.log(`Running on localhost:${port}`));
1 ответ
Все, что вы запрашиваете, должно идти в index.html, который является отправной точкой для вашего приложения.
установить маршрутизатор с приведенной ниже конфигурацией.
<BrowserRouter basename="/directory-name">
<App/>
</BrowserRouter>