目前我在使用react-router的BrowserHistory和nginx代理转发请求时遇到问题。我已经阅读了以下答案:
React-router urls don't work when refreshing or writting manually
似乎我正在寻找的解决方案是全能,/*
将所有传入的请求转发给index.html
。
如果URL深度为一级,即可以正常工作。 /about
。但是,如果我尝试在子路由/some/other/url
上刷新页面,页面将完全中断。
这是我当前的nginx配置(请注意http的永久重定向 - > https):
server {
listen 443 ssl;
server_name my.domain.io;
ssl_certificate /etc/letsencrypt/live/my.domain.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/my.domain.io/privkey.pem;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
#try_files $uri $uri/ /index.html;
try_files $uri $uri/ /index.html$is_args$args;
#try_files $uri /index.html;
#try_files $uri $uri/ /index.html?$args;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
location ~ /.well-known {
allow all;
}
}
server {
listen 80;
server_name my.domain.io;
return 301 https://$host$request_uri;
}
在location /
区块中,您会注意到我试图开始工作的其他一些try_files
语句,但无济于事。
这是react-router
逻辑的样子:
<Route path="/user" component={ConnectedUserPage} />
<Route path="/user/preview/:locationId" component={ConnectedUserPage} />
<Route
path="/user/preview/:locationId/menu"
component={ConnectedUserPage}
fullMenuVisible={true}
/>
<Route
path="/user/preview/:locationId/menu/:sectionName/:someId"
component={ConnectedUserPage}
dishDetailsVisible={true}
/>
{/* Restaurant Profile */}
<Route
path="/location-profile/:profileId"
component={LocationProfile}
activeTabIndex={0}
/>
<Route
path="/location-profile/:profileId/gallery"
component={LocationProfile}
activeTabIndex={0}
/>
<Route
path="/location-profile/:profileId/gallery/:imageId"
component={LocationProfile}
activeTabIndex={0}
/>
<Route
path="/location-profile/:profileId/details"
component={LocationProfile}
activeTabIndex={1}
/>
<Route
path="/location-profile/:profileId/menu"
component={LocationProfile}
activeTabIndex={2}
/>
<Route
path="/location-profile/:profileId/comments"
component={LocationProfile}
activeTabIndex={3}
/>
<Route
path="/location-profile/:profileId/stuff"
component={LocationProfile}
activeTabIndex={4}
/>
<Route
path="/location-profile/:profileId/menu/:somethingName"
component={LocationProfile}
activeTabIndex={2}
/>
<Route
path="/location-profile/:profileId/menu/:somethingName/:someItemId"
component={LocationProfile}
activeTabIndex={2}
/>
.
.
.
.
感谢任何帮助或指导。
答案 0 :(得分:4)
我遇到了类似你的问题,我的团队花了很多时间看nginx和react-router,这与你的设置非常相似。
我也遇到以下错误:
未捕获的SyntaxError:意外的令牌&lt;错误
最后我发现了一个解决方案,实际上是在我的index.html服务器文件上。
我正在使用我的捆绑包的相对路径
<link href="styles.css" rel="stylesheet" />
<script src="bundle.js"></script>
在路由之后,假设您尝试访问your/path/subdomain
,它会尝试获取your/path/subdomain/styles.css
和your/path/subdomain/bundle.js
处的bundle.js和styles.css文件,但它们是在我的项目的根源。
所以我的解决方案就是使用
<link href="/styles.css" rel="stylesheet" />
<script src="/bundle.js"></script>
这解决了这个问题。希望这会对你有所帮助。