Laravel + AngularJS Nginx路由

Fro*_*oxz 6 php nginx laravel angularjs laravel-5.3

我有以下问题,我需要配置Nginx,所以在任何URL用户访问时,它将保留uri(示例domain.com/some/url/),但只传递给laravel /并让Angular处理路由.

Route::get('/', function(){
   return view('index');
});
Run Code Online (Sandbox Code Playgroud)

当访问/api/{anything}Laravel时会启动.

现在我index.html从公共文件夹返回,直到找到解决方案这是我的配置:

location / {
    index index.html;
    try_files $uri $uri/ /index.html;
}
location /api {
    index index.php;
    try_files $uri $uri/ /index.php?$query_string;
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以做一条路线:

Route::get('{anything?}', function(){
    return view('index');
});
Run Code Online (Sandbox Code Playgroud)

但是要广泛.

更新:

location / {
    rewrite ^/(.*)$ / break;
    index index.php;
    try_files $uri $uri/ /index.php;
}
location /api {
    index index.php;
    try_files $uri $uri/ /index.php?$query_string;
}
Run Code Online (Sandbox Code Playgroud)

shu*_*van 6

你无法通过简单的重写实现目标.Laravel总是知道真实的URI.

关键是你需要只用一条路线来处理所有请求.Laravel使用$_SERVER['REQUEST_URI']变量进行路由,并将其传递给Laravel fastcgi.该变量REQUEST_URIfastcgi_paramsnginx $request_uri变量的文件中设置:

fastcgi_param  REQUEST_URI        $request_uri;
Run Code Online (Sandbox Code Playgroud)

所以,你需要通过REQUEST_URI/到Laravel来处理请求/bla/bla,因为它是/.

只需在配置中添加一行:

location ~ \.php$ {
    # now you have smth like this
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;

    # add the following line right after fastcgi_params to rewrite value of the variable
    fastcgi_param  REQUEST_URI       /;
}
Run Code Online (Sandbox Code Playgroud)

如果你也有/api/,你需要对该行进行一些编辑:

set $request_url $request_uri;
if ($request_uri !~ ^/api/(.*)$ ) {
    set $request_url /;
}
fastcgi_param  REQUEST_URI $request_url;
Run Code Online (Sandbox Code Playgroud)

Nginx警告说这if是一个邪恶,这只是第一个想法.

总结一下:

/去Laravel /路线.

/api/* 去Laravel api路线.

另一个要求是去Laravel /路线.