关于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 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

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

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

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

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

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

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

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

1年前 评论

APP_URL=http://127.0.0.1/xxx

1年前 评论

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