2017-01-25 49 views
5

我有以下问题, 我需要配置Nginx的,所以在任何URL的用户访问,它将保持URI(例如domain.com/some/url/),但传递给laravel仅/,让角处理路由。 。Laravel + AngularJS Nginx的路由

Route::get('/', function(){ 
    return view('index'); 
}); 

和访问/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; 
} 

我知道我可以做路线如:

Route::get('{anything?}', function(){ 
    return view('index'); 
}); 

但是要广泛。

更新:

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; 
} 
+0

您是否在寻找NGINX来执行所有请求的index.blade.php脚本?如果是这样,你需要配置fastcgi。 –

+0

我有fastcgi,这个问题不是关于如何处理php文件,而是关于如何从laravel总是返回'/'路径,但保留'URI'为角 – Froxz

+0

你可以用一个简单的重写规则去除URL:'rewrite^/(.*)$/last;' –

回答

4

你不能达到你用简单的重写目标。 Laravel总是知道真正的URI

关键是你需要处理所有的请求只有一个路由。 Laravel使用$_SERVER['REQUEST_URI']变量进行路由,并从fastcgi传递给Laravel。变量REQUEST_URIfastcgi_params文件中设置从nginx的的$request_uri变量:

fastcgi_param REQUEST_URI  $request_uri; 

所以你需要通过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  /; 
} 

如果你有/api/还有,你需要一些修改为线:

set $request_url $request_uri; 
if ($request_uri !~ ^/api/(.*)$) { 
    set $request_url /; 
} 
fastcgi_param REQUEST_URI $request_url; 

Nginx的警告if是一个邪恶的,这是只是第一个想法。

综上所述:

/去Laravel /路线。

/api/*去Laravel api路线。

另一个请求去Laravel /路线。

+0

不错,但是这也打破了我的'api路线'。它们都有前缀'/ api /' – Froxz

+0

所以你有'/'和'/ api /(.*)'用于api。好的,检查更新。 –

+0

谢谢你的工作,但你认为更好的解决方案,或者只是创建一个与任何网址laravel路线? – Froxz