在Laravel中使用强制URL缓存Web路由

Chr*_*fer 8 php caching routes laravel

我在反向代理后面运行一个laravel项目,这就是为什么我需要强制使用根url和scheme的原因:

URL::forceRootUrl($proxy_url);
URL::forceScheme($proxy_schema);
Run Code Online (Sandbox Code Playgroud)

我将其添加到我的顶部,/routes/web.php并且在运行之前一直运行良好:

php artisan optimize
Run Code Online (Sandbox Code Playgroud)

它在/bootstrap/cache 没有强制URL和方案的情况下缓存了路由,因此现在我所有的URL都指向错误的根URL。

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

我必须手动删除路由缓存文件,/bootstrap/cache才能使路由重新工作。

缓存路由时,它是否生效?

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

Erk*_*kök 9

自PHP人员优化除去laravel 5.6(源2

在此处输入图片说明


Ptr*_*Ton 6

Using URL::forceRootUrl and URL::forceScheme seems like a work-around for working with reverse proxies. The clean solution for it would be to add a trusted proxies in your configuration. This post explains the feature in full. But it comes down to:

  1. Use the App\Http\Middleware\TrustProxies middleware
  2. Edit the middleware $proxies property with the IP(s) of your load balancer
    protected $proxies = [
        '192.168.1.1',
        '192.168.1.2',
    ];
Run Code Online (Sandbox Code Playgroud)
  1. Remove the following code from /routes/web.php
URL::forceRootUrl($proxy_url);
URL::forceScheme($proxy_schema);
Run Code Online (Sandbox Code Playgroud)