静态Vue SPA和PHP应用程序的Nginx配置

时间:2019-11-11 21:00:45

标签: laravel codeigniter vue.js nginx vue-router

我知道无论如何这都不是理想的设置,但是我希望有人可以帮助我使这种情况发挥作用。本质上,我两个都有:

  • Vue SPA应用程序

    • 营销前端
    • 只有几个URI:
      • hxxps://domain.com
      • hxxps://domain.com/#/ { home | 联系人 | 登录}
  • Codeigniter(CI)PHP应用程序

    • 主要应用
    • 集中式路由器和类似Laravel的(index.php?$ uri),带有几个URI端点:
    • hxxps://domain.com/ {仪表板 | 帐户 | }

我实际上是在尝试避免将静态Vue应用嵌入到Codeigniter中(似乎有额外的开销),并避免使用代理方法,因为它是静态内容,不需要运行Node。

到目前为止,这是我对Nginx配置的尝试:

/ etc / nginx / sites-available / default

server {
  root /var/www;
  index index.php index.html;

  location / {
    # Codeigniter
    try_files $uri $uri/ /index.php?/$request_uri;

    # Vue SPA
    if ($uri ~ '') {
      root /var/www/path_to_spa/dist;
    }
  }
}

我已经成功为这两个应用程序硬连接了资产路径。

这似乎足以在Vue和CI应用程序之间进行路由,但是CI应用程序现在无法处理POST和重定向请求,因为我收到404s-可能是因为URI检查松散。

Nginx禁止有条件的(如果) try_files 语句,因此我觉得自己的双手束缚不住。想知道是否有人可以在这里提供更好的解决方案:)

1 个答案:

答案 0 :(得分:0)

如果您已经配置好,并且只对POST请求给出错误,也许您可​​以检查它是否为POST?

server { 
  set $vue 0;

  root /var/www;
  index index.php index.html;

  location / {
     # Codeigniter
     try_files $uri $uri/ /index.php?/$request_uri;

     if( $uri = '' ) {
        set $vue 1;
     }
     if ($request_method = POST ) {
       set $vue 0; 
     }

     #Vue SPA
     if( $vue = 1 ) {
        root /var/www/path_to_spa/dist;
     }
  }
}

未经测试,但我认为您可以使其正常运行。干杯!