【问题标题】:Caching web routes with forced url in laravel在 laravel 中使用强制 url 缓存 web 路由
【发布时间】:2019-11-10 06:05:30
【问题描述】:

我在反向代理后面运行一个 laravel 项目,这就是为什么我需要强制根 url 和方案:

URL::forceRootUrl($proxy_url);
URL::forceScheme($proxy_schema);

我已将此添加到我的 /routes/web.php 的顶部,并且在我运行之前它工作正常:

php artisan optimize

它缓存了/bootstrap/cache中的路由没有强制的url和scheme,所以现在我所有的url都指向了错误的根url。

我尝试将代码移动到/Providers/AppServiceProvider.phpregisterboot),以便在缓存路由时使其生效,但没有运气。

我必须手动删除/bootstrap/cache 中的路由缓存文件才能让我的路由再次工作。

在缓存路由的时候要不要让它生效?

编辑: 我还尝试创建一个全局中间件,在其中执行强制 url 和模式。在缓存路​​由之前它再次工作正常,但是在运行php artisan optimize 时,路由再次不正确。

【问题讨论】:

  • 你用的是哪个 laravel 版本?
  • 我正在使用当前最新的 5.8 版本

标签: php laravel caching routes


【解决方案1】:

自 laravel 5.6 起删除了 php artisan 优化 (source, source2)

【讨论】:

  • 请记住 php artisan route:cache still exists,如果 OP 正在使用它,问题可能仍然存在。我建议使用TrustProxies 遵循@PtrTon 的建议并修复根本问题。
【解决方案2】:

使用URL::forceRootUrlURL::forceScheme 似乎是使用反向代理的一种解决方法。干净的解决方案是在您的配置中添加受信任的代理。 This post 完整解释了该功能。但归根结底是:

  1. 使用App\Http\Middleware\TrustProxies 中间件
  2. 使用负载平衡器的 IP 编辑中间件 $proxies 属性
    protected $proxies = [
        '192.168.1.1',
        '192.168.1.2',
    ];
  1. /routes/web.php中删除以下代码
URL::forceRootUrl($proxy_url);
URL::forceScheme($proxy_schema);

【讨论】:

    猜你喜欢
    • 2020-11-08
    • 2020-06-01
    • 2020-11-17
    • 2012-11-25
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多