跳到主内容
UniKit

.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

同类工具