关于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
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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

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

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

3周前 评论
wenl (楼主) 3周前

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

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

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

3周前 评论

APP_URL=http://127.0.0.1/xxx

3周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!