停止修改 .htaccess:切换 Laravel 版本的更好方法

发布: (2026年1月2日 GMT+8 23:04)
4 min read
原文: Dev.to

Source: Dev.to

Cover image for Stop Hacking Your .htaccess: A Better Way to Switch Laravel Versions

概览

我们都有过这种经历。晚上 10:00,你刚完成对 Laravel 站点的重大更新,准备上线。

过去,我常做很多人第一时间会尝试的事:.htaccess 小技巧。我会把新版本上传到子文件夹,然后用一些巧妙的 Apache 规则“指向”该网站。

当时觉得很聪明。但随后出现了各种 bug:CSS 路径破损、会话错误,最可怕的是——不小心把 .env 文件暴露到公网。

今天,我想向你展示一种更好、更“专业”的做法。它叫 符号链接(symlink)。听起来很技术,其实就像在桌面上创建一个快捷方式一样简单。

“面包店”类比

想象你经营一家面包店。你有一个展示柜(你的网站),用来展示你的蛋糕。

.htaccess 方式: 每次烤出新蛋糕时,你都尝试搬动整个展示柜。既沉重又慢,还可能掉东西。

symlink 方式: 你保持展示柜位置不变,只更换里面的托盘。顾客始终看到同一个位置,但蛋糕是最新的。

为什么 .htaccess 方法风险大

在深入“怎么做”之前,先说说为什么应该避免通过 .htaccess 切换版本:

  • 安全性: 如果重定向不完美,可能会暴露敏感文件(如 .env)。
  • 路径问题: 当项目埋在子文件夹中时,Laravel 的 public_path() 等函数会混乱。
  • 停机时间: .htaccess 文件中的一个拼写错误就可能导致整个站点出现 “500 Internal Server Error”。

更好的办法:“current” 文件夹策略

不要搬动文件,而是在服务器上创建如下结构:

/my-project/
├── releases/
│   ├── v1_old/   (你的旧代码)
│   └── v2_new/   (你的新代码)
└── current/      (“魔法”快捷方式)

你的 Web 服务器(Apache 或 Nginx)始终会指向 current/public 文件夹。要切换版本,只需把 current 快捷方式指向不同的文件夹即可。

步骤指南

1. 准备文件夹

把新版本上传到 releases/ 内的一个文件夹,例如 v2_new

2. 魔法指令

打开终端(SSH)。不要复制文件,直接运行以下命令:

ln -sfn /home/username/releases/v2_new/public /home/username/public_html

这行命令做了什么? 它告诉服务器:“嘿,每当有人访问 public_html 时,实际上展示 v2_new/public 里的文件。” 这会 瞬间 生效——没有加载条,也不需要等待。

3. “撤销”按钮(回滚)

如果在 v2_new 中发现严重 bug,你可以在一秒钟内切回旧版本:

ln -sfn /home/username/releases/v1_old/public /home/username/public_html

就这么简单——没有停机,没有危险的重定向,.env 也安全地保持在非公开位置。

Back to Blog

相关文章

阅读更多 »