必须同步调整Nginx配置与Laravel引擎注册:①在AppServiceProvider中注册view()->addExtension('html','blade')并重命名视图文件;②添加location规则deny敏感目录访问防源码泄露;③扩展PHP处理规则匹配.html后缀;④清理public下同名静态文件避免路由失效。

修改 Laravel 视图模板后缀(如从 .blade.php 改为 .html)后,Nginx 会因无法识别新后缀而直接下载文件或返回 404,必须同步调整其 PHP 处理规则与静态资源拦截逻辑,否则页面空白、路由失效、源码泄露风险陡增。
第一步:修改 Laravel 视图后缀并注册引擎
在 AppServiceProvider 的 boot() 方法中注册新后缀解析器:
这一步不能只改文件名,必须让 Blade 引擎主动认领 .html 后缀,否则 view('welcome') 仍去找 welcome.blade.php。
view()->addExtension('html', 'blade');
同时将 resources/views/welcome.blade.php 重命名为 welcome.html——注意不要删掉 Blade 指令,@if、@yield 等仍有效。
第二步:禁止 Nginx 直接暴露新后缀视图文件
Nginx 默认不拦截 .html 文件,而 Laravel 的 resources/views/ 目录在 public 上级,一旦用户访问 /resources/views/welcome.html,Nginx 可能直接返回源码——【这是严重安全漏洞】。
在 server 块内添加以下 location 规则:
location ~ ^/(resources|app|config|bootstrap|storage|vendor)/ { deny all; }
该规则必须放在 location / 之前,否则会被覆盖;它会拦截所有对敏感目录的请求,包括 /resources/views/index.html 这类路径。
第三步:让 Nginx 把新后缀请求交给 PHP-FPM 处理
默认的 location ~ \.php$ 不匹配 .html,必须新增一条 PHP 处理规则:
方法一:扩展正则匹配(推荐)
location ~ \.(php|html)$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
try_files $uri =404;
}
⚠️ 注意:这里 try_files $uri =404; 是强制校验物理文件是否存在,防止恶意构造 /fake.html/xxx 绕过重写直接执行任意 PHP 脚本。
方法二:单独为 .html 写 location(更精确)
location ~ \.html$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.html;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
try_files $uri =404;
}
第四步:确保 public 目录下无同名 .html 静态文件冲突
第一步完成后,Laravel 会把 resources/views/welcome.html 编译成缓存文件,但如果你在 public/ 目录下也放了一个 welcome.html,Nginx 的 try_files $uri $uri/ /index.php?$query_string 会优先返回这个静态文件,而不是走 Laravel 路由。
检查 public/ 目录,删除所有与视图同名的 .html 文件——例如删掉 public/welcome.html,否则访问 /welcome 将永远显示静态页,中间件、Auth、CSRF 全部失效。
这一步操作起来很简单,直接进 public 目录执行 rm -f welcome.html 即可。


















