2017-01-25 5 views
5

У меня есть следующий вопрос, мне нужно настроить Nginx, так и на любой пользователь URL обращается, он будет держать Ури (пример 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'); 
}); 

Но он широк.

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

Вы ищете NGINX для выполнения скрипта index.blade.php для всех запросов? Если это так, вам нужно настроить fastcgi. –

+0

У меня есть fastcgi, вопрос заключается не в том, как обрабатывать php-файлы, а в том, как возвращать всегда '/' маршрут из laravel, но сохранить 'URI' для углового – Froxz

+0

Вы можете удалить URL-адрес с помощью простого правила перезаписи:' rewrite^/(.*)$/last; ' –

ответ

4

Вы не можете достичь цели вам с простой перезаписи. Laravel всегда знает о реальном URI.

Главное, что вам нужно обрабатывать все запросы одним маршрутом. Laravel использует $_SERVER['REQUEST_URI'] переменной для маршрута и передается в Laravel от fastcgi. Переменная REQUEST_URI устанавливается в fastcgi_params файл из $request_uri переменной Nginx в:

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.

Другие запросы отправляются в Ларавел /.

+0

Приятно, но это также ломает мои «api маршруты». У всех них есть префикс '/ api /' – Froxz

+0

. У вас есть '/' для углового и '/ api /(.*)' для api. Хорошо, проверьте обновление. –

+0

Спасибо, работы, но то, что вы думаете, лучше это решение или просто создать маршрут laravel с любым URL-адресом? – Froxz

Смежные вопросы