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

Laravel route()生成链接指向服务器本地IP而非APP_URL配置域名

问题

使用Laravel的route()函数生成的所有链接,均指向Web服务器的本地IP,而非.env文件中APP_URL配置的域名。
已确认情况:

  • .env文件中APP_URL配置正确
  • Nginx已正确配置

实际渲染结果:

<a href="http://sub.domain.com/1">some product id</a>

期望渲染结果:

<a href="http://10.101.171.23/1">some product id</a>

视图代码:

<a href="{{ route('products.show', $product->id) }}">some product id</a>
解决方案

1. 清除Laravel缓存

Laravel会缓存配置信息,修改.env后可能未即时生效,执行以下命令清除各类缓存:

php artisan config:clear
php artisan route:clear
php artisan cache:clear

2. 检查Nginx的Host头传递配置

确保Nginx在转发请求时正确传递Host头,避免Laravel错误获取服务器本地IP。在Nginx的server块中添加或确认以下配置:

location / {
    try_files $uri $uri/ /index.php?$query_string;
    fastcgi_param HTTP_HOST $host;
    fastcgi_param X-Real-IP $remote_addr;
    fastcgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
    fastcgi_param X-Forwarded-Proto $scheme;
}

修改完成后重启Nginx:

sudo systemctl restart nginx

3. 强制指定URL生成根地址

若上述方法无效,可在AppServiceProvider的boot()方法中强制设置URL生成的根地址,覆盖Laravel自动检测结果:

use Illuminate\Support\Facades\URL;

public function boot()
{
    URL::forceRootUrl(env('APP_URL'));
    // 若为HTTPS环境,可追加:
    // URL::forceScheme('https');
}

修改后刷新配置缓存:

php artisan config:cache

4. 确认配置缓存状态

如果之前执行过php artisan config:cache,.env的修改不会被读取,必须先执行config:clear清除旧缓存,再根据需求重新缓存配置。

内容的提问来源于stack exchange,提问作者julian.wurzer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:42:05