我知道这无论如何都不是一个理想的设置,但我希望有人能帮助我实现这个场景。本质上,我有两个:
-
Vue SPA应用
- 营销前端
- 只有少数URI:
- hxxps://domain.com
- hxxps://domain.com/#/{主页|联系人|登录}
-
Codeigniter(CI(PHP应用
- 主要应用程序
- 集中式路由器&类似Laravel的(index.php?$uri(,带有几个uri端点:
- hxxps://domain.com/{仪表板|帐户|等}
我真的在努力避免在Codeigniter中嵌入静态Vue应用程序(似乎是额外的开销(,并避免代理方法,因为它是静态内容,不需要Node运行。
以下是我迄今为止对Nginx配置的尝试:
/etc/nginx/站点可用/默认
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和重定向请求,因为我得到了404个请求——可能是因为URI检查不严。
Nginx禁止条件(if(try_files语句,所以我觉得我的手很紧。想知道是否有人能在这里提供更优雅的解决方案:(
如果您已经使用的配置很好,并且只在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;
}
}
}
未经测试,但我认为你可以做到。干杯