You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel分页URL显示localhost而非域名问题求助

Laravel分页链接显示localhost:3000而非生产域名的解决办法

问题描述

生产服务器上Laravel应用的分页链接错误显示localhost:3000,其他路由及URL均正常,仅分页存在异常。已尝试使用{{ $orders->render() }}渲染分页,以及通过str_replace替换SERVER_ADDR的方式,均未解决问题。

控制器分页代码如下:

UserOrder::join('shipping_address','users_orders.id','=','shipping_address.order_id')
    ->whereHas('products', function ($product) {
        return $product->where('name', '!=', 'LIT für Filling')
               ->where('name', '!=', 'LIT für Refund');
    })
    ->where( 'users_orders.delivery_name', 'Packstation' )
    ->where( 'shipping_address.recipient_first_name', null )
    ->orderByDesc( 'users_orders.id' )
    ->paginate( 10, [ '*' ], 'page_packing_station', $pageNumber );

解决步骤

1. 确认APP_URL环境变量配置

  • 检查生产环境的.env文件,确保APP_URL设置为正确的生产域名:
    APP_URL=https://example.com
    
  • 修改后执行配置清理与缓存命令(生产环境建议缓存配置):
    php artisan config:clear
    php artisan config:cache
    

2. 手动设置分页实例的URL路径

在控制器中获取分页结果后,调用setPath方法指定正确的URL,让分页生成器基于当前请求URL或自定义域名路径生成链接:

$orders = UserOrder::join('shipping_address','users_orders.id','=','shipping_address.order_id')
    ->whereHas('products', function ($product) {
        return $product->where('name', '!=', 'LIT für Filling')
               ->where('name', '!=', 'LIT für Refund');
    })
    ->where( 'users_orders.delivery_name', 'Packstation' )
    ->where( 'shipping_address.recipient_first_name', null )
    ->orderByDesc( 'users_orders.id' )
    ->paginate( 10, [ '*' ], 'page_packing_station', $pageNumber );

// 基于当前请求URL设置路径
$orders->setPath(request()->url());

// 或直接指定完整域名路径(如果当前请求URL仍有问题)
// $orders->setPath('https://example.com/your-route-uri');

3. 配置服务器反向代理请求头(如Nginx)

如果应用部署在反向代理服务器后,需确保服务器传递正确的请求头,让Laravel识别真实的域名和协议:
在Nginx配置文件中添加以下代理头:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

同时,在Laravel的config/trustedproxy.php中添加服务器IP到信任代理列表(生产环境建议指定具体IP,而非通配符):

'proxies' => [
    '192.168.1.1', // 替换为你的服务器IP
],

4. 检查自定义分页视图

如果使用了自定义分页视图,排查视图中是否存在硬编码的localhost:3000,确保分页链接使用Laravel内置的$paginator->url($page)方法生成,而非手动拼接URL。

内容的提问来源于stack exchange,提问作者user2806214

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:20:28