javascript - 启用 SSL 刷新 URL 时出现 React-router 问题

标签 javascript reactjs ssl nginx react-router

目前,我在使用 React-router 的 BrowserHistory 和 nginx 代理转发请求时遇到问题。我已阅读以下答案:

React-router urls don't work when refreshing or writting manually

看来我正在寻找的解决方案是一个包罗万象的解决方案,/* 将所有传入请求转发到index.html

如果 URL 是一层深,即可以正常工作。 /关于。但是,如果我尝试在子路由 /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/ block 中,您会注意到我尝试过的其他一些 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}
      />
      .
      .
      .
      .

感谢任何帮助或指导。

最佳答案

我遇到了与您类似的问题,我的团队花了很多时间研究 nginx 和 React-router,这与您的设置非常相似。

我也遇到了以下错误:

Uncaught SyntaxError: Unexpected token < error

最后我找到了一个解决方案,实际上它就在我的index.html服务器文件中。

我为我的包使用了相对路径

<link href="styles.css" rel="stylesheet" />    
<script src="bundle.js"></script>

路由之后,假设您尝试访问your/path/subdomain,它会尝试在your/path/subdomain获取bundle.js和styles.css文件/styles.cssyour/path/subdomain/bundle.js,但它们位于我项目的根目录。

所以我的解决方案就是使用

<link href="/styles.css" rel="stylesheet" />
<script src="/bundle.js"></script>

这解决了问题。希望这对您有帮助。

关于javascript - 启用 SSL 刷新 URL 时出现 React-router 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45439198/

相关文章:

javascript - JQuery Ajax 成功后弹出窗口不会打开

javascript - 从链接加载 JSON 以在范围内使用

用于加载速度的 PHP 和 Javascript/Ajax 缓存 - JSON 和 SimpleXML

javascript - 无限自动播放纯 css 轮播

javascript - 无法禁用 X-Powered-By : Express

reactjs - 在另一个组件中定义 React Router 路由

javascript - 如何通过 Hooks 在 React 中使用嵌入代码

ssl - 更改 SSL 证书

java - 如何将多个信任库路径添加到 “java.net.ssl.trustStore” ?

sockets - Boost 在 SSL 和 TLS 之间进行选择