⚙️ .htaccess 生成器
通过勾选即可实时生成生产级 .htaccess:HTTPS 重定向、HSTS、gzip / brotli、缓存、敏感文件拒绝、WordPress 永久链接等。
🔒 关于隐私
- ・所有生成均在您的浏览器中完成
- ・输入的域名和设置不会发送到服务器
- ・无日志、无追踪、无数据库
🧩 选择功能
📄 生成的 .htaccess
📖 常见的坑
把 HTTPS 跳转、www 统一、PHP 版本指定、缓存控制、安全响应头、访问限制等组合起来生成 .htaccess。处理全部在浏览器内完成。.htaccess 有一个其他配置文件所没有的危险性质——写错一行,该目录以下的全部内容会立刻返回 500 错误。而且错误页面不会告诉你原因。如果你的管理后台也在同一目录树内,你就无法从那里修复——动手编辑之前,请先确认你有退路。
| 情形 | 会发生什么 | 怎么处理 |
|---|---|---|
| 一行写错,整站变成 500 | .htaccess 在每一次请求时都会被重新读取,因此错误从你保存的那一刻起就影响所有请求。最常见的原因是使用了未加载模块的指令——在 mod_headers 被禁用的环境里写 Header set ...,Apache 无法理解那一行,于是返回 500 Internal Server Error。麻烦之处在于,这不是「语法正确但不生效」,而是「配置读不了,所以全部停摆」。你看到的只有一个通用错误页,上面不会写明是第几行、哪里不对——那些信息只存在于服务器的错误日志里。在看不到日志的共享主机上,定位原因就变成了逐条排除。 |
依赖模块的指令请务必用 <IfModule> 包起来。写在 <IfModule mod_headers.c> 里,没有该模块的环境只会直接忽略它,而不会变成 500——仅此一条就能挡掉大半事故。就流程而言,编辑前务必留一份副本,并且通过「站点 500 时仍然可用的通道」来编辑,比如 SSH 或 FTP——从 WordPress 后台去改它,等于在拆自己站着的地板。而且要小步添加,每加一点就在浏览器里确认一次——一口气加了十行然后 500,你就只能靠二分法去找是哪一行。如果是共享主机,请事先确认自己能否查看错误日志,真出事时才不至于束手无策。 |
| 重定向死循环 / 301 撤不回来 | 把强制 HTTPS 与 www 统一写在一起,取决于条件的先后顺序,会形成无限循环。尤其是前面挂着负载均衡或 CDN 的架构:请求到达服务器时永远是 HTTP,于是 %{HTTPS} 一直是 off,重定向便永远重复下去——症状就是 ERR_TOO_MANY_REDIRECTS。而 301 的性质又雪上加霜:301 意为「永久」,浏览器会强力缓存,即便你改好了配置,浏览器仍会继续执行那条旧的重定向。结果就是「改了却还是坏的」,于是你继续折腾配置,把事情弄得更糟——这是这类问题里最耗时间的模式。 |
若处在代理之后,请改看 %{HTTP:X-Forwarded-Proto}。写成 RewriteCond %{HTTP:X-Forwarded-Proto} !https,即使经过 CDN 也能正确判定。而且验证请一律用 curl -I 而不是浏览器——curl 不缓存重定向,你看到的永远是当前配置的结果。搭建期间先用 302,确认行为符合预期后再改成 301——仅这一个顺序,就能避开几乎所有由缓存引起的事故。如果已经发出了错误的 301,唯一的补救是再返回一个指向正确目标的 301——别人浏览器里的缓存,你这边是清不掉的。另外,重定向规则请集中在一个地方——一旦散落在多个 .htaccess 与应用配置里,死循环的成因就再也追不出来了。 |
子目录的 .htaccess 会抵消父级规则 |
.htaccess 是按层级生效的,但唯有 mod_rewrite 的规则是「替换」而不是「继承」。只要你在子目录里写下一条 RewriteRule,父目录的重写规则在该目录下就立刻失效——强制 HTTPS 和 www 统一都会唯独在那里失灵。难以察觉的原因是,其他指令(认证、缓存、响应头)照常继承,于是形成「只有一部分被继承」这种反直觉的行为。与之相关,子目录有时需要指定 RewriteBase,忘了写,相对路径就会按父级路径解析,导致 404 或死循环。 |
条件允许的话,干脆不要用 .htaccess,把配置写进服务器主配置。VPS 或独立服务器可以写在 <Directory> 块里——这样也更快,因为省掉了每次请求都去查找并读取该文件的开销(设为 AllowOverride None 后,Apache 连找都不会去找)。如果共享主机只允许用 .htaccess,请把重写规则集中在父级的一个文件里,并避免在子目录里放任何 RewriteRule。确实需要时,写 RewriteOptions Inherit 可以继承父级规则,但它会改变生效顺序,届时请务必把每一种路径都实际请求一遍来确认。 |
安全响应头并不是加上就安全了。X-Frame-Options 与 Content-Security-Policy 只是封堵特定的攻击手法,对应用自身的漏洞毫无作用——扫描工具的分数上去了,和真的变安全了,是两回事。尤其是 Content-Security-Policy,配错了会让你自家的 JavaScript 跑不起来——请先用 Content-Security-Policy-Report-Only 观察上报情况,再切换到真正生效的那一个。另外,.htaccess 里的访问限制只在「该文件经由 Apache 分发时」才有效——在由 nginx 在前面直接返回静态文件的架构里,.htaccess 根本不会被读取。把机密文件放在公开目录之外才是正道,靠访问限制去遮掩只是退而求其次。还有一点容易被忘记:.htaccess 本身也请纳入版本管理——一份没人说得清「何时由谁加了什么」的配置文件,早晚会变成谁都不敢碰的东西。
📖 使用方法
-
1
选择功能在左侧勾选所需功能。右侧实时显示预览。
-
2
输入域名若启用 www 规范化,请输入域名。仅 HTTPS 重定向无需输入。
-
3
复制或下载使用右上方按钮复制到剪贴板或下载为文件。上传前请检查内容。
-
4
上传到服务器将文件作为 .htaccess 放到文档根目录(public_html / htdocs / public)。请先备份已有文件。
❓ 常见问题
.htaccess 在 Apache 以外可用吗?
出现 500 错误怎么办?
共享主机(Xserver / Sakura)可用吗?
🔗 相关工具
🐛 此工具出现问题了吗?
免费、无需注册。仅提供复现步骤也有帮助。报告将直接发送给运营者并用于改进。
感谢您的反馈!
已送达运营者,将用于改进工具。