2017-01-25 5 views
5

Ich habe folgendes Problem, Ich brauche Nginx zu konfigurieren, so dass auf eine beliebige URL Benutzer greift, wird es den uri halten (Beispiel domain.com/some/url/), aber nur / Laravel passieren und Angular lassen die Routing-Griff . .Laravel + AngularJS Nginx Routing

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

Und wenn /api/{anything} Zugriff Laravel wird kick

Vorerst ich index.html aus dem öffentlichen Ordner zurück, bis ich Lösung finden Hier ist meine Config:

location/{ 
    index index.html; 
    try_files $uri $uri/ /index.html; 
} 
location /api { 
    index index.php; 
    try_files $uri $uri/ /index.php?$query_string; 
} 

Ich weiß, dass ich machen kann eine Route wie:

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

Aber ist zu breit.

Update:

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

Suchen Sie nach NGINX, um das Script index.blade.php auf allen Anfragen auszuführen? Wenn dies der Fall ist, müssen Sie fastcgi konfiguriert haben. –

+0

Ich habe fastcgi, die Frage ist nicht, wie man PHP-Dateien verarbeiten, sondern darüber, wie immer '/' Route von Laravel aber behalten 'URI' für eckig – Froxz

+0

Sie können die URL mit einer einfachen Rewrite-Regel entfernen:' rewrite^/(.*)$/last; ' –

Antwort

4

Sie können nicht, dass Sie Ziel mit einfacher Rewrite erreichen. Laravel weiß immer über die echte URI.

Der entscheidende Punkt ist, dass Sie alle Anfragen mit nur einer Route bearbeiten müssen. Laravel verwendet $_SERVER['REQUEST_URI'] Variable zu routen und es wird an Laravel von fastcgi übergeben. Die Variable REQUEST_URI wird in fastcgi_params Datei von nginx der $request_uri Variable:

fastcgi_param REQUEST_URI  $request_uri; 

So müssen Sie REQUEST_URI als / zu Laravel passieren Anfrage bearbeiten /bla/bla wie es / ist.

Nur eine Zeile in die Config hinzu:

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  /; 
} 

Wenn Sie /api/ auch haben, müssen Sie einige Änderungen für die Linie:

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

Nginx warnt davor, dass if ein Übel ist, das ist nur eine erste Idee.

Fazit:

/ geht an Laravel / Route.

/api/* gehen Sie zu Laravel api Routen.

Weitere Anfragen gehen nach Laravel / Route.

+0

Schön, aber das bricht auch meine 'api Routen'. Sie haben alle das Präfix '/ api /' – Froxz

+0

Sie haben also '/' für angular und '/ api /(.*)' für api. Ok, überprüfe das Update. –

+0

Danke funktioniert, aber was denkst du ist besser diese Lösung oder einfach eine Laravel Route mit einer beliebigen URL erstellen? – Froxz