React Router 路由不适用于 nginx create-react-app
React Router routes not working on nginx create-react-app
我正在使用 "react-router-dom": "^4.2.2"
。
如果我在 localhost:3000/second
上进行测试,它会完美运行。
当我使用 nginx 将其上传到 ubuntu 服务器并尝试 www.website.com
时,它有效。当我尝试使用 www.website.com/second
时,它给了我 404 not found
。我正在使用 create-react-app
。
app.js
class TestRoutes extends React.Component{
constructor(props){
super(props);
}
render(){
return(<React.Fragment>
<BrowserRouter>
<Switch>
<Route exact path='/' component={MainPage}/>
<Route path='/second' component={SecondPage}/>
<Route path='/third' component={ThirdPage}/>
</Switch>
</BrowserRouter>
</React.Fragment>);
}
}
ReactDOM.render(<TestRoutes/>, document.getElementById("root"));
/etc/nginx/sites-available/default
这是来自服务器的配置文件
server {
listen 443 ssl;
root /var/www/reactcamera/build;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name website.com www.website.com;
ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; #
managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; #
managed by Certbot
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
您需要通过 /etc/nginx/sites-available/.
配置 nginx
将有一个模板默认文件,如果您想保留它,请复制它。完成后,使用任何文本编辑器并将 /etc/nginx/sites-available/default 更改为以下内容:
server {
listen 80 default_server;
root /var/www/[Your repo name]/build;
server_name [your.domain.com] [your other domain if you want to];
index index.html index.html;
location / {
}
}
答案在这个线程中找到
我要做的是将 /etc/nginx/sites-available/default
中的 default
配置文件修改为:
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri /index.html;
}
我在live服务器上的解决方案:
server {
listen 80;
listen [::]:80;
root /var/www/example.com;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ /index.html;
}
}
如果您希望在 Dockerfile
和 运行 您的 React
应用程序中执行此操作,请使用 nginx
请参阅以下答案。
这修复了允许 nginx
将来自不同端点的流量直接路由到您的 React 应用程序的 React Router
问题。
我正在使用 "react-router-dom": "^4.2.2"
。
如果我在 localhost:3000/second
上进行测试,它会完美运行。
当我使用 nginx 将其上传到 ubuntu 服务器并尝试 www.website.com
时,它有效。当我尝试使用 www.website.com/second
时,它给了我 404 not found
。我正在使用 create-react-app
。
app.js
class TestRoutes extends React.Component{
constructor(props){
super(props);
}
render(){
return(<React.Fragment>
<BrowserRouter>
<Switch>
<Route exact path='/' component={MainPage}/>
<Route path='/second' component={SecondPage}/>
<Route path='/third' component={ThirdPage}/>
</Switch>
</BrowserRouter>
</React.Fragment>);
}
}
ReactDOM.render(<TestRoutes/>, document.getElementById("root"));
/etc/nginx/sites-available/default 这是来自服务器的配置文件
server {
listen 443 ssl;
root /var/www/reactcamera/build;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name website.com www.website.com;
ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem; #
managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem; #
managed by Certbot
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
您需要通过 /etc/nginx/sites-available/.
配置 nginx将有一个模板默认文件,如果您想保留它,请复制它。完成后,使用任何文本编辑器并将 /etc/nginx/sites-available/default 更改为以下内容:
server {
listen 80 default_server;
root /var/www/[Your repo name]/build;
server_name [your.domain.com] [your other domain if you want to];
index index.html index.html;
location / {
}
}
答案在这个线程中找到
我要做的是将 /etc/nginx/sites-available/default
中的 default
配置文件修改为:
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri /index.html;
}
我在live服务器上的解决方案:
server {
listen 80;
listen [::]:80;
root /var/www/example.com;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ /index.html;
}
}
如果您希望在 Dockerfile
和 运行 您的 React
应用程序中执行此操作,请使用 nginx
请参阅以下答案。
这修复了允许 nginx
将来自不同端点的流量直接路由到您的 React 应用程序的 React Router
问题。