【问题标题】:Applying ssl only to admin routes of site仅将 ssl 应用于站点的管理路由
【发布时间】:2016-04-18 11:12:19
【问题描述】:

我有一个用 PHP Laravel 5.1 制作的网站,带有 PingPong 管理包,用于该网站的管理 CMS。

路线如下:

mywebsite » 用于公共网站

mywebsite/admin » 用于管理员 CMS

我的客户只想在 mywebsite/admin 路由中添加 SSL 协议。 有可能这样做吗? 如果是,我是否需要为此添加一些额外的代码行?

【问题讨论】:

  • “我的客户只想在 mywebsite/admin 路由中添加 SSL 协议”——不要。尝试确定某些东西是否不需要安全并为此启用 SSL 是对资源的毫无意义的浪费(以及引入错误的风险)。只需在任何地方使用 SSL。它更容易,对用户更好,对搜索引擎来说也是更好的食物。
  • 那么,在整个站点使用 SSL 是没有缺点的,对吧?我会告诉他们的。

标签: php laravel ssl https


【解决方案1】:

您可以创建一个在 URL 不安全时重定向的中间件(通过 HTTPS)。然后在要强制执行 SSL 的路由上启用该中间件:

<?php // app/Http/Middleware/Secure.php

namespace App\Http\Middleware;

use Closure;

class Secure
{
    public function handle($request, Closure $next)
    {
        if (!$request->isSecure()) {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }
}

在您的app/Http/Kernel.php 中添加中间件:

protected $routeMiddleware = [
    'secure' => \App\Http\Middleware\Secure::class
];

并在管理路由上启用中间件,例如使用路由组:

Route::group(['middleware' => 'secure', 'prefix' => 'admin'], function () {
    // here your routes (without 'admin/' prefix)
});

现在,当有人通过普通 HTTP 访问管理 URL 时,他将被重定向到该路由的 HTTPS 版本。

当然,您需要以适当的方式设置证书,以便该站点可以通过 HTTP 和 HTTPS 访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-28
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多