启用推送状态和上下文路径路由:在服务器上找不到静态资产

2024-03-25

我使用静态构建包将 React 应用程序部署到 Cloud Foundry。目标是使应用程序可以在domain.com/下访问path。所以我根据他的博客文章配置了路线:https://www.cloudfoundry.org/context-path-routing/ https://www.cloudfoundry.org/context-path-routing/

另外,我设置了pushstate: enabled在静态文件中并将上下文路径添加到静态资产 URLS 中;例如。样式表的 URL 是domain.com/path/static/style.css。 当我访问domain.com/path 时,我得到了index.html 文件。但是,找不到 index.html 文件中链接的静态资源,而是找到了索引文件。如果在服务器上找不到资源,这是推送状态路由的默认行为。

我还需要配置什么才能运行该应用程序吗pushstate: enabled在“子目录”中?


当您启用推送状态时pushstate: enabled,由 buildpack 为您的应用程序组装的 Nginx 配置将大致如下所示。我还突出显示了专门为解决推送状态而添加的部分。

server {
    listen 8080;
    server_name localhost;

    root /home/vcap/app/public;

    location / {
        # <-- this bit here is what's added for push state support
        if (!-e $request_filename) {
          rewrite ^(.*)$ / break;
        }
        #  -->

        index index.html index.htm Default.htm;

    }
}

您可以在构建包中看到启用此功能的代码here https://github.com/cloudfoundry/staticfile-buildpack/blob/5a588b6e3d3673521a4cc13faf4d34ab67300713/src/staticfile/finalize/data.go#L96-L100.

我认为简短的答案是,buildpack 假设您用完了根目录而不是子目录,这就是当您使用 Cloud Foundry 的基于路径的路由时会发生的情况。

要解决此问题,您只需手动启用相同或相似的 Nginx 配置即可。为此,我建议采取以下措施:

  1. Enable 自定义位置配置 https://docs.cloudfoundry.org/buildpacks/staticfile/index.html#config-options。请参阅该链接中具有该名称的表中的列并按照这些说明进行操作。这给了我以下内容Staticfile.

    root: public
    location_include: includes/*.conf
    

    请注意,这要求所有静态文件都位于名为的文件夹下public(或者您想要命名的文件根文件夹的任何名称)。使用时必须这样做location_include.

  2. 添加自定义包含文件nginx/conf/includes/push_state.conf并在文件内添加以下内容。

    location /path/ {
    
        if (!-e $request_filename) {
          rewrite ^(.*)$ /path/ break;
        }
    
        index index.html index.htm Default.htm;
    
    }
    
  3. 推送您的应用程序。它应该使用添加到构建包使用的基本 Nginx 配置中的自定义代码进行部署和运行。

希望有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启用推送状态和上下文路径路由:在服务器上找不到静态资产 的相关文章

  • 如何修改codeigniter中的路由

    帮我解决这个问题 举个例子 我有这个正常的网址 localhost CI index php base storeurl 我怎样才能让 Codeigniter 知道要寻找 本地主机 CI storeurl 我有一个名为index 的函数 它
  • PHP REST API 路由

    我一直在研究 API 并为我们正在进行的项目开发 REST API API 只接受来自一个 JSON 格式的源的连接 我理解这一点很好 如果理解了所说的大部分内容 但是我不明白第三个代码示例以及路由信息的去向 他们提供的例子是 data R
  • fosuserbundle 找不到“GET /login/”的路由

    我最近使用composer更新了symfony2 现在无法登录 这是相关文件 如果需要更多数据 请告诉我 应用程序 配置 路由 yml app admin resource AppAdminBundle Resources config r
  • Asp.Net 3.5 路由到 Web 服务?

    我一直在寻找一种路线http www example com WebService asmx http www example com WebService asmx to http www example com service http
  • 在omniauth中命名的Rails路由

    我在routes rb中有这个 namespace api do namespace v1 do devise for users constraints format json controllers gt omniauth callba
  • Google 地图 v3 创建两点之间的路线

    我正在使用 Google Maps API 开发网络应用程序 我正在尝试在两点之间创建一条路线 但由于某种原因我还没有弄清楚如何创建它 以下是我的代码 如果我缺少什么 请告诉我 谢谢
  • ASP.NET Core 授权重定向到错误的 URL

    我正在尝试运行一个映射了以下路由的 Web 应用程序 app UseMvc routes gt routes MapRoute default WoL controller Account action Login id 如果用户未经过身份
  • RoutingError 未初始化常量

    我想在我的应用程序中使用 token authenticatable 使用 Devise Using this https stackoverflow com questions 4627703 using devise tokens to
  • Ruby On Rails 更新 Heroku 动态路由

    我有一个使用应用程序范围的 slugs 的应用程序 使用懒惰的宝石 https github com RISCfuture slugalicious与 Sluggable 表 并使用以下代码路由到这些 slugs Slugs begin S
  • 如何在 WordPress 中创建“路线”?

    为了我自己的理智 我正在尝试为 ajax api 创建一条路由 如下所示 api
  • Docker nuget连接超时

    尝试利用官方jetbrains teamcity agentKubernetes 上的图像 我已经设法在 Docker 中运行 Docker 但尝试使用以下命令构建 ASP NET Core 映像docker build命令失败于dotne
  • 如何在navigationStart路由器事件中暂停路线更改

    在我的应用程序中 我有从包 节点模块 公开的路由 因此 我无法将 canActivate 或 canDeactivate 用于节点模块内定义的路由 因此 我开始订阅应用程序组件中的所有路线更改 并根据条件将用户重定向到不同的路线 由于条件有
  • 奇怪的 Rails 路由行为:两个 id 在嵌套资源中交换

    我在我的应用程序中设置了以下路由 表单属于一个站点 map resources sites do site site resources forms end 但是 当我尝试使用帮助程序 例如 edit site form path form
  • Laravel 5.5 多重身份验证路由问题

    尝试使用 Doctrine 而不是 Eloquent 让 Laravel 进行多重身份验证 我已经尝试了很多事情 但总是陷入困境 我目前定义了两个守卫 两个模型 两个登录控制器等 如果我启用其中之一 它们就会起作用 如果我同时尝试两者 则似
  • 如何在 Angular i18n 路由器模块中使用 LOCALE_ID

    我正在使用 Angular 的 i18n 设置构建一个小型 Angular 应用程序 除了 url 路径和 slugs 的翻译之外 一切都工作正常 我尝试了一种可能的解决方案 为每种语言提供一个路由模块 如此处所述 但这不起作用 我以为我可
  • ASP NET Web API 路由模板

    我有一个名为 Agency 的实体 具有以下 api GET http localhost 37331 api agency start 1 limit 10 status 1 GET http localhost 37331 api ag
  • 具有多个可选参数的 Rails 3 路线

    我正在尝试创建一个具有可选参数和不同顺序的 Rails 路线 这个问题描述了一个类似的问题 具有多个 可选且漂亮参数的路由 https stackoverflow com questions 14007593 routes with mul
  • 如何使用 cf 程序查看我的 VCAP_SERVICES 环境变量?

    当我跑步时cf env
  • 在 Akka 中配置嵌套 Router

    我有一些嵌套的路由器 应创建它FromConfig 我想要的是这样的 test akka actor deployment worker router round robin nr of instances 5 slave router b
  • 根据路由隐藏 ng-view DOM 之外的元素

    问题 如何将 登录 视图 路线添加到我的角度应用程序中 隐藏位于ng view DOM 情况 在我的 Angular 页面中 左侧有一个导航树视图 中间有一个主视图 div div class col sm 3 div div div di

随机推荐