2017-01-25 35 views
5

Mam następujący problem, muszę skonfigurować Nginx, więc na każdy użytkownik URL dostępu, będzie utrzymywać URI (na przykład domain.com/some/url/), ale przechodzą do laravel tylko / i niech kątowa obsługiwać routing . .laravel + angularjs Nginx routingu

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

A przy dostępie /api/{anything} laravel zainaugurują w

Na razie wracam index.html z folderu publicznego, aż znajdę rozwiązanie Oto mój config:

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

wiem, że mogę zrobić trasa taka jak:

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

Ale jest szeroki.

Aktualizacja:

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

Szukasz NGINX do uruchomienia skryptu index.blade.php we wszystkich zleceniach? Jeśli tak, potrzebujesz konfiguracji fastcgi. –

+0

Mam fastcgi, pytanie nie dotyczy tego, jak przetwarzać pliki php, ale o tym, jak zawsze zwracać '/' trasę z laravel, ale zachować 'URI' dla kątowego – Froxz

+0

Możesz usunąć adres URL za pomocą prostej reguły przepisywania:' przepisać^/(.*)$/last; ' –

Odpowiedz

4

nie można osiągnąć celu, który z prostego przepisać. Laravel zawsze wie o prawdziwym URI.

Najważniejsze jest to, że musisz obsłużyć wszystkie zamówienia za pomocą tylko jednej trasy. Laravel używa zmiennej $_SERVER['REQUEST_URI'] do trasy i jest przekazywana do Laravel z fastcgi. Zmienna REQUEST_URI jest ustawiony w fastcgi_params pliku z $request_uri zmiennej nginx za:

fastcgi_param REQUEST_URI  $request_uri; 

Więc trzeba przejść REQUEST_URI jak / do laravel obsłużyć żądania /bla/bla jak to jest /.

Wystarczy dodać jeden wiersz do config:

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

Jeśli masz /api/ jak dobrze, trzeba pewne zmiany dla linii:

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

Nginx ostrzega, że ​​if jest złem, to tylko pierwszy pomysł.

Podsumowując:

/ idzie laravel / trasie.

/api/* przejdź do tras Laravel api.

Kolejne zapytania kierują się na trasę Laravel /.

+0

Fajnie, ale to także łamie moje 'trasy api '. Wszystkie mają prefiks '/ api /' – Froxz

+0

Więc masz '/' dla kątowego i '/ api /(.*)' dla api. OK, sprawdź aktualizację. –

+0

Dziękuję, że działasz, ale czy uważasz, że jest to lepsze rozwiązanie, lub po prostu utworzyć trasę z dowolnym adresem URL? – Froxz

Powiązane problemy