Laravel + AngularJS Nginx 路由
Posted
技术标签:
【中文标题】Laravel + AngularJS Nginx 路由【英文标题】:Laravel + AngularJS Nginx routing 【发布时间】:2017-06-11 02:22:41 【问题描述】:我有以下问题,
我需要配置 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;
【问题讨论】:
您是否正在寻找 NGINX 对所有请求执行 index.blade.php 脚本?如果是这样,您需要配置 fastcgi。 我有 fastcgi,问题不在于如何处理 php 文件,而在于如何从 laravel 始终返回/
路由但保留 URI
用于 angular
您可以使用简单的重写规则剥离 URL:rewrite ^/(.*)$ / last;
@FaisalMemon 我应该把它放在哪里?我尝试过重定向周期。
对不起,把'last'改成'break'。它应该放在您希望它执行的位置。
【参考方案1】:
您无法通过简单的重写来实现您的目标。 Laravel 总是知道真正的URI
。
关键是你需要用一个路由来处理所有的请求。 Laravel 使用 $_SERVER['REQUEST_URI']
变量进行路由,并从 fastcgi
传递给 Laravel。变量REQUEST_URI
设置在来自nginx 的$request_uri
变量的fastcgi_params
文件中:
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 /
路由。
【讨论】:
很好,但这也破坏了我的api routes
。他们都有前缀/api/
所以你有 /
用于 Angular 和 /api/(.*)
用于 api。好的,检查更新。
谢谢你的作品,但你认为这个解决方案更好还是只创建一个带有任何 url 的 laravel 路由?
我更喜欢 Laravel 路由。你可以在这里阅读它(laravel5 的答案) - ***.com/questions/13297278/… P.S.有一个肮脏的解决方法 - 在不更改 nginx
的情况下删除 /
的 Laravel 路由并将您的视图放置到 resources/views/errors/404.blade.php
。所以api
调用将转到api
,任何其他请求将转到此视图。它只是给出 404 错误标头:)以上是关于Laravel + AngularJS Nginx 路由的主要内容,如果未能解决你的问题,请参考以下文章