.htaccess 转 Nginx
把 Apache .htaccess 逐行转换成 Nginx 配置:RewriteRule / RewriteCond(HTTP_HOST、REQUEST_URI、[L,R=301,QSA,NC])、Redirect / RedirectMatch、ErrorDocument、Options 与 Deny/Allow / Require,无法转换的行会保留成注释并列出警告。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
Nginx 配置
指令总数
0
已转换
0
注释行
0
警告
0
无法转换的部分
全部指令都转换成功,没有需要人工确认的地方。
这个工具能做什么
- 把站点从 Apache 迁到 Nginx 时先转一遍:RewriteRule / RewriteCond、Redirect、ErrorDocument、Options、Deny/Allow 都能直接出 Nginx 配置。
- 理解两边语法差异:条件重写会变成 if ($http_host ~* ...) 加 rewrite,重定向状态码映射成 permanent / redirect。
- 迁移前先做体检:无法转换的行会保留成注释并列入警告清单,一眼看出哪里需要人工改。
- 作为学习材料对照阅读:同一个跳转规则在 Apache 和 Nginx 里分别怎么写,比看两套文档更直观。
示例
输入
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]输出
# 由 UniKit 的 .htaccess → Nginx 转换器生成,请结合站点实际情况调整
location / {
# RewriteEngine On:nginx 默认就会处理 rewrite,无需该指令
if ($http_host ~* "^example.com$") {
rewrite "^/(.*)$" https://www.example.com/$1 permanent;
}
}生成结果是片段,需要放进 server 块里;[R=301,L] 映射为 permanent,[NC] 映射为 ~* 不区分大小写匹配。
常见问题
转换结果能直接粘贴进 nginx.conf 吗?
基本可以,但要注意它是片段:rewrite 规则被包在 location / { ... } 里,你需要把整段放进对应的 server 块,并确认 root、index、try_files 这些基础配置已经存在。生成的文件头注释也提醒了这一点。
哪些指令无法转换?
带 [P] 标志的代理转发(Nginx 需要单独的 proxy_pass 和 upstream)、替换目标是「-」的规则、Files/Directory 这类块指令、Require 的复杂写法,以及 Options 里没有直接对应项的选项。这些行会保留成注释并出现在警告清单里。
为什么 if 指令在这里是安全的?
Nginx 官方不建议在 location 里滥用 if,但对 host 匹配、简单重定向这类场景(if ($http_host ...) 或 if ($request_uri ...))是安全的。转换器只在这类 RewriteCond 上生成 if,不会把复杂逻辑塞进去。
Order / Deny / Allow 是怎么处理的?
Deny from all 转成 deny all;、Allow from 转成 allow 加网段,同时会给出警告:Apache 的 Order 决定 allow 与 deny 的先后顺序,而 Nginx 按出现顺序逐条匹配,语义不完全等价,迁移后需要自己确认顺序。
转换过程会把配置发到服务器吗?
不会。解析与生成都在浏览器里用 JavaScript 完成,页面不发送任何请求,.htaccess 里的内部路径、域名等信息不会离开你的设备。
关键词:htaccessnginxrewriterewriterulerewritecondredirectapache转换重写规则伪静态errdocument