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

概览
我们都有过这种经历。晚上 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 也安全地保持在非公开位置。