今天,我决定将网站移至HTTPS。早期,我的网站使用HTTP。
我的问题是误解了Laravel如何在helpers函数中传递HTTP和https route('name')
我将网站网址更改config/app.php为https://www.domain.name,我认为此解决方案对我有帮助。但是我得到了一个奇怪的结果。
在php artisan tinker如果我通过route('ROUTE.NAME')我得到了正确的链接https://www.domain.name/route/path
,但在刀片模板我http://www.domain.name/route/path
同样的情况 \URL::to('/')
也许有人可以向我解释为什么会这样?
小智 12
@dekts响应是正确的,但是在引导方法上,放置此类内容的“ 正确 ”位置是“ app / Providers / AppServiceProvider.php ” 。
//file: app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\URL;
class AppServiceProvider extends ServiceProvider {
public function boot()
{
if (app()->environment('remote')) {
URL::forceScheme('https');
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
您还可以在“ .env ”文件上添加一个新变量,例如:
#file: .env
FORCE_HTTPS=true
Run Code Online (Sandbox Code Playgroud)
并将条件更改为
//file: app/Providers/AppServiceProvider.php
public function boot()
{
if(env('FORCE_HTTPS')) {
URL::forceScheme('https');
}
}
Run Code Online (Sandbox Code Playgroud)
希望能有所帮助。
我为此苦苦挣扎了多年。我的解决方案是将以下内容放在我的 routes.php 文件中(您可能更喜欢不同的地方)
我还在这一行周围包装了一个条件语句,因此它仅适用于我的远程配置:
if (App::environment('remote')) {
URL::forceSchema('https');
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试在boot方法中添加您的 AppServiceProvider 。这里:app/Providers/AppServiceProvider.php
或者另一种方式:
所以我想通了。这不是那么容易,但在AppServiceProvider.php你必须添加:$this->app['request']->server->set('HTTPS', true);在register方法中。我就是这样想出来的。
顺便提一句。设置对您的应用程序APP_URL没有任何作用HTTP,它是为工匠准备的。
附注。CloudFlareHTTPS重写也是个好主意:)
在 .env 文件中
FORCE_HTTPS=true
Run Code Online (Sandbox Code Playgroud)
在 app/Providers/AppServiceProvider.php
public function boot()
{
if(env('FORCE_HTTPS',false)) {
URL::forceScheme('https');
}
}
Run Code Online (Sandbox Code Playgroud)
5.4之后方法名是forceScheme
如果你使用' forceSchema ' 会得到一个错误
"Method Illuminate\Routing\UrlGenerator::forceSchema does not exist."
Run Code Online (Sandbox Code Playgroud)
小智 6
自动检测http/https
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\Request;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
/* Use https links instead http links */
if (Request::server('HTTP_X_FORWARDED_PROTO') == 'https')
{
URL::forceScheme('https');
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5275 次 |
| 最近记录: |