【问题标题】:Force Laravel to use HTTPS version强制 Laravel 使用 HTTPS 版本
【发布时间】:2018-10-12 13:13:06
【问题描述】:

我有一个 laravel 站点,我正在尝试使用 SSL 来处理一切。 虽然 Laravel 似乎想改用 http。 例如,我使用form 元素,该方法自动发送到http。使用内置的stylescript 链接进行相同的操作,我将其全部更改为静态工作(常规的 ol' HTML)。我无法弄清楚的最后一件事是分页(使用jscroll)。 我有这一行:

{!! $plugins->appends(['tag' => $param2, 'search' => $param1 ])->render() !!}

打印这个:

    <ul class="pager">
<li class="disabled"><span>«</span></li> 
<li class="jscroll-next-parent" style="display: none;"><a href="http://siteurl.net/pagename/page/?tag=XXX&amp;search=&amp;page=2" rel="next">»</a>
</li>
</ul>

知道如何将其更改为 https 吗? 谢谢!

【问题讨论】:

  • 您也可以考虑通过 htaccess 从 HTTP 重定向到 HTTPS(如果您使用的是 apache)。
  • 确保 .env 中的 APP_URL= 前面有 https://。
  • 这无济于事,因为屏幕上打印的 URL 是 http,我需要更改打印的内容
  • 其实我没有APP_URL但是我添加了它并没有改变任何东西
  • 你找到合适的解决方案了吗?

标签: php laravel ssl https pagination


【解决方案1】:

试试这个,去 AppServiceProvider 把这段代码放在 boot 方法中:

\URL::forceScheme('https');

班级:

namespace App\Providers;

use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        URL::forceScheme('https');
    }
}

其他方式由 .htaccess 强制执行:

RewriteEngine On

RewriteCond %{HTTPS} !on
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

记住清除浏览器中的缓存(然后 htaccess 将正常工作)。

祝你好运!

【讨论】:

  • 谢谢,虽然我得到一个错误:调用未定义的方法 Illuminate\Routing\UrlGenerator::forceScheme() 有什么办法解决这个问题?
  • 尝试导入:使用 Illuminate\Routing\Route;
  • laravel 版本?
  • 我明白了!使用:Illuminate\Support\Facades\Route(我刚刚编辑了答案)
  • 版本:5.0.31。我太兴奋了,我以为它会起作用。但不是。遇到同样的错误
【解决方案2】:

如果您只想生成 https 路由(但仍然允许纯 http 请求),请更改 AppServiceProvider:

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        URL::forceScheme('https');
    }
}

如果你想将任何http请求重定向到https,添加一个全局中间件:

class ForceHttpsMiddleware{
    public function handle($request, Closure $next){

        if (!$request->secure() && App::environment() === 'production') {//optionally disable for localhost development
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }
}

【讨论】:

    【解决方案3】:

    我通过在 Canflare 上实施 SSL 让一切正常工作。它不在代码中,但它有效。

    【讨论】:

    • 换句话说就是htaccess
    【解决方案4】:

    forceScheme错误应该是forceSchema,你应该找到AppServiceProvider并在boot函数下添加:

    \URL::forceScheme('https');
    

    这意味着它将是

    public function boot()
    {
        \URL::forceSchema('https');
    }
    

    【讨论】:

      【解决方案5】:

      打开app\Providers\AppServiceProvider.php

      添加下面的类

      use Illuminate\Support\Facades\URL; 
      

      然后只需在 AppServiceProvider.php 的 Boot() 函数中写入源代码

      <?php
      
      if($this->app->environment('production')) { // it will force redirect to https in Production mode 
            URL::forceScheme('https');
      }
      
      ?>
      

      它会强制将http请求重定向到https

      & 然后用 .env file 中的 https url 更新 APP_URL 变量

      例如:-

      APP_URL=https://stackoverflow.com
      

      如果您使用这种方式,那么您不需要对服务器文件或 .htaccess 文件进行任何更改

      注意:- 我使用 Laravel 8 所以,我不确定它是否能在 Laravel 8 的以下版本中工作

      【讨论】:

        猜你喜欢
        • 2021-05-20
        • 2013-07-27
        • 1970-01-01
        • 2020-12-11
        • 1970-01-01
        • 2020-11-07
        • 2018-11-28
        • 2021-08-20
        • 2021-07-14
        相关资源
        最近更新 更多