我有以下问题,我需要配置Nginx,所以在任何URL用户访问时,它将保留uri(示例domain.com/some/url/
),但只传递给laravel /
并让Angular处理路由.
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; }
shukshin.iva.. 6
你无法通过简单的重写实现目标.Laravel总是知道真实的URI
.
关键是你需要只用一条路线来处理所有请求.Laravel使用$_SERVER['REQUEST_URI']
变量进行路由,并将其传递给Laravel fastcgi
.该变量REQUEST_URI
在fastcgi_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 /
路线.
你无法通过简单的重写实现目标.Laravel总是知道真实的URI
.
关键是你需要只用一条路线来处理所有请求.Laravel使用$_SERVER['REQUEST_URI']
变量进行路由,并将其传递给Laravel fastcgi
.该变量REQUEST_URI
在fastcgi_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 /
路线.