问题
I have the following issue,
I need to configure Nginx, so on any URL user accesses, it will keep the uri (example domain.com/some/url/
), but pass to laravel only /
and let Angular handle the routing.
Route::get('/', function(){
return view('index');
});
And when accessing /api/{anything}
Laravel will kick in.
For now I return index.html
from public folder until I find solution
Here is My Config:
location / {
index index.html;
try_files $uri $uri/ /index.html;
}
location /api {
index index.php;
try_files $uri $uri/ /index.php?$query_string;
}
I know I can make a route like:
Route::get('{anything?}', function(){
return view('index');
});
But is to broad.
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;
}
回答1:
You can't achieve you goal with simple rewrite. Laravel always knows about the real URI
.
The key point is that you need to handle all requests with just one route. Laravel uses $_SERVER['REQUEST_URI']
variable to route and it is passed to Laravel from fastcgi
. The variable REQUEST_URI
is set in fastcgi_params
file from nginx's $request_uri
variable:
fastcgi_param REQUEST_URI $request_uri;
So you need to pass REQUEST_URI
as /
to Laravel to handle request /bla/bla
as it is /
.
Just add one line to your 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 /;
}
If you have /api/
as well, you need some edits for the line:
set $request_url $request_uri;
if ($request_uri !~ ^/api/(.*)$ ) {
set $request_url /;
}
fastcgi_param REQUEST_URI $request_url;
Nginx warns that if
is an evil, that's just a first idea.
To sum up:
/
goes to Laravel /
route.
/api/*
go to Laravel api routes.
Another requests go to Laravel /
route.
来源:https://stackoverflow.com/questions/41859481/laravel-angularjs-nginx-routing