2017-01-25 117 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