关于route函数生成url的原理

1. 运行环境#

框架为 Laravel 9
环境为 nginx、php 8

2). nginx 服务配置#

http://127.0.0.1/xxx/
  1. 我是获取地址参数,然后通过 proxy_pass 转发到不同端口,从而达到访问不同项目的目的。
    location /xxx/ {
         proxy_pass http://localhost:8081/;
         proxy_redirect off;
         proxy_set_header Host $http_host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

3). 问题描述#

  1. 页面是可以正常访问的,但是前端组件中使用了 route () 函数,打印了 route () 函数返回的数据,显示为 127.0.0.1/ ,缺少了 xxx / 的部分
  2. 尝试过通过修改 env 文件中的 APP_URL 来解决此问题,但没反应。也尝试过自定义 route () 函数,通过 APP_ENV 来判断是否加前缀,毕竟上线后还是不需要 xxx / 的这个前缀的,但自定义函数由于加载顺序原因获取不到 env 里的内容。

2. 期望得到的结果#

  1. 希望能优雅的修改 route () 函数的 host 部分的返回值,最好能够通过配置文件的方式完成。
    route('login');
    // 正常情况下的返回值,http://127.0.0.1/login
    // 我期待的返回值,http://127.0.0.1/xxx/login
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

把这个放在任意 ServiceProvider 的 boot 里面,应该就可以。

app('url')->formatPathUsing(function($path, $route){
  // TODO 你也可以在这里添加,
  // eg:
  return 'abc/' . $path;
});
2年前 评论
wenl (楼主) 2年前
讨论数量: 6

你都自定义 route 了 为啥不 /app/Providers/RouteServiceProvider.php 动态修改 prefix 呢

2年前 评论
wenl (楼主) 2年前

把这个放在任意 ServiceProvider 的 boot 里面,应该就可以。

app('url')->formatPathUsing(function($path, $route){
  // TODO 你也可以在这里添加,
  // eg:
  return 'abc/' . $path;
});
2年前 评论
wenl (楼主) 2年前

laravel 会涉及到用 php 内置的服务启动,再用 nginx 等代理访问的问题,所以放弃了域名前缀的添加,这个可以自己再包装一层用来添加域名前缀

2年前 评论

APP_URL=http://127.0.0.1/xxx

2年前 评论