You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除Laravel默认Strict-Transport-Security并自定义配置?

解决Laravel+Inertia项目HSTS头重复及生产环境419错误问题

一、消除重复的Strict-Transport-Security头

当前出现两个HSTS头是因为Laravel默认配置和.htaccess设置同时生效,可通过以下两种方式解决:

方式1:通过.htaccess覆盖原有头

修改.htaccess中的<IfModule mod_headers.c>块,先移除原有HSTS头再设置新值,确保仅保留一个有效头:

<IfModule mod_headers.c>
    # 先移除Laravel默认添加的HSTS头
    Header unset Strict-Transport-Security
    # 设置12个月有效期的HSTS规则
    Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
</IfModule>

方式2:禁用Laravel自带的HSTS头

若不想通过.htaccess管理HSTS,可直接关闭Laravel的默认HSTS配置:

  1. 打开app/Http/Kernel.php,找到全局中间件或web中间件组中的\Illuminate\Http\Middleware\AddHttpHeaders::class(部分Laravel版本为\Illuminate\Http\Middleware\SendHeaders::class),将其注释或移除。
  2. 也可通过自定义中间件完全接管HSTS头(见下文)。

二、修复生产环境419错误

419错误通常与CSRF验证、会话配置相关,结合HSTS场景,按以下步骤排查修复:

  1. 配置HTTPS相关参数

    • 在.env文件中设置:APP_URL=https://你的域名、SESSION_SECURE_COOKIE=true
    • 编辑config/session.php,设置:'secure' => env('SESSION_SECURE_COOKIE', true)、'domain' => env('SESSION_DOMAIN', '你的域名')
  2. 清除配置缓存
    通过共享主机的SSH工具或控制面板终端执行:

    php artisan config:cache
    php artisan cache:clear
    php artisan view:clear
    
  3. 确保CSRF令牌正常传递

    • Inertia项目根模板(如resources/views/app.blade.php)需包含@csrf指令
    • 前端发起请求时,确认Inertia自动携带X-CSRF-TOKEN头(手动请求需自行添加)

三、自定义中间件实现HSTS(替代.htaccess方案)

若之前自定义中间件未生效,检查以下配置要点:

  1. 创建中间件文件app/Http/Middleware/CustomHsts.php:

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Http\Request;
    
    class CustomHsts
    {
        public function handle(Request $request, Closure $next)
        {
            $response = $next($request);
    
            // 仅在生产环境且HTTPS请求时设置HSTS
            if (app()->environment('production') && $request->isSecure()) {
                // 第三个参数设为true,强制覆盖已有的HSTS头
                $response->headers->set(
                    'Strict-Transport-Security',
                    'max-age=31536000; includeSubDomains; preload',
                    true
                );
            }
    
            return $response;
        }
    }
    
  2. 在app/Http/Kernel.php的$middlewareGroups['web']中注册该中间件,放在所有响应头相关中间件之后,确保能覆盖默认值:

    protected $middlewareGroups = [
        'web' => [
            // ...其他中间件
            \App\Http\Middleware\CustomHsts::class,
        ],
    ];
    
  3. 执行缓存清除命令,确保中间件生效。

内容的提问来源于stack exchange,提问作者ASHafizullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:25:21