.htaccess 生成器,免费

为常见的服务器配置生成 Apache .htaccess 规则。

没有数据离开您的设备

强制 HTTPS

强制 WWW / 非 WWW

安全头

GZIP 压缩

浏览器缓存

自定义错误页

目录选项

生成的 .htaccess 文件

什么是 .htaccess?

.htaccess 文件是 Apache Web 服务器的配置文件。它允许您设置 URL 重定向、安全头、缓存规则等 · 无需修改服务器主配置。

常见问题

.htaccess 文件放在哪里?

将它放在网站的根目录(通常是 public_htmlwww)。规则适用于该目录及其所有子目录。

它能在 Nginx 上使用吗?

不能。.htaccess 是 Apache 特有的。Nginx 使用自己的配置语法,写在 nginx.conf 或站点配置文件中。

.htaccess 会让我的站点变慢吗?

Apache 会在每次请求时读取 .htaccess,因此非常大的文件会带来额外开销。对于高流量站点,将规则迁移到 Apache 主配置中会更快。

.htaccess文件的本质

.htaccess文件是Apache的逐目录配置文件。该名称通常被理解为「hypertext access」(超文本访问)的缩写,反映了该文件最初限制超文本文档访问的主要用途。将其放置在任意目录中,指令即适用于该目录及其所有子目录。该文件点号前没有文件名(这是Unix的隐藏点文件),且必须严格命名为 .htaccess(小写字母、前置圆点),Apache才能在默认 AccessFileName 设置下找到它。

这会带来真实的性能代价。Apache官方文档明确指出:「如果AllowOverride被设置为允许使用.htaccess文件,Apache将在每个目录中查找.htaccess文件。因此,允许使用.htaccess文件会造成性能损耗,无论您是否真正使用它们。」目录树会在每次HTTP请求时被遍历。对于向 /var/www/html/foo/bar/baz.html 发起的请求,Apache会依次stat检查 /.htaccess/var/.htaccess/var/www/.htaccess/var/www/html/.htaccess 等是否存在,即便这些文件都不存在也不例外。Apache自身的建议是:在可能的情况下使用主配置中的 <Directory> 块(在启动时解析一次),仅在无法访问主配置的托管环境中才使用 .htaccess

何时需要(以及何时不需要)它

Apache列举了两种使用 .htaccess 的合理场景:一是托管服务商在不给予完整服务器配置访问权限的情况下为用户提供有限控制;二是指令需要在子目录间有所不同而部署者仅能控制文件系统的情况。除此之外,官方文档明确建议将规则移至主配置中的 <Directory> 块。

nginx(第二流行的Web服务器)完全不支持.htaccess;它出于性能原因故意拒绝逐目录配置文件,所有配置均集中在 nginx.conf 及其包含的站点文件中。如果您的项目使用nginx,本生成器的输出将无效,您需要在nginx配置文件中使用server/location块。Caddy使用其独有的Caddyfile语法,默认通过Let's Encrypt自动提供HTTPS。LiteSpeedOpenLiteSpeed支持 .htaccess 以兼容Apache。IIS使用 web.config

URL重写与标准HTTPS跳转模式

大多数非简单的 .htaccess 工作使用mod_rewrite,这是Apache基于POSIX扩展正则表达式的规则驱动URL重写引擎。基本语法结构为 RewriteRule pattern substitution [flags],前面可选择性地添加一个或多个 RewriteCond 条件。标准强制HTTPS跳转块如下:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

[L,R=301] 标志的含义是「本轮次中这是最后一条规则」和「响应HTTP 301 Moved Permanently」。301适用于永久跳转,搜索引擎会传递链接权重,浏览器也会积极缓存。仅在确实是临时跳转(即不希望缓存该移动操作)的情况下使用302(Found)。

在终止TLS的负载均衡器或反向代理后面,源服务器接收到的是纯HTTP请求,即使用户浏览器使用的是HTTPS,简单的 RewriteCond %{HTTPS} off 规则此时会造成无限跳转循环。解决办法是改为检查转发头:RewriteCond %{HTTP:X-Forwarded-Proto} !https。Cloudflare的「灵活SSL」模式(CDN以HTTP与源站通信,而用户浏览器使用HTTPS)是造成这种跳转循环陷阱最常见的原因。

使用类似模式在www与非www规范化之间进行选择。出于SEO目的(避免重复内容问题)和Cookie作用域(默认情况下 www 子域名与顶级域名接收不同的Cookie),应选择一个规范主机名。

压缩与缓存

mod_deflate对文本响应进行gzip压缩,能大幅减少text/HTML/CSS/JS的传输体积。将该块包裹在 <IfModule mod_deflate.c> 中,以避免在未加载该模块的服务器上导致站点崩溃。Brotli(mod_brotli)是现代替代方案,使用相同模式。

mod_expires设置 ExpiresCache-Control: max-age 响应头。广泛使用的「access plus 1 year」语法表示资源可从用户获取时起缓存一年。长max-age适用于带哈希值的资源文件名(如 app.abc123.js);较短的max-age适用于HTML及任何可变内容。对于更精细的控制,在哈希文件上使用 Header set Cache-Control "public, max-age=31536000, immutable" 是现代最佳实践。

值得了解的安全响应头

隐藏不应被访问的文件

两个安全加固单行指令可大大提升安全性:

Apache 2.4将旧版 Order Allow,Deny 语法替换为更简洁的 Require 指令系列:Require all grantedRequire all deniedRequire ip 192.0.2.0/24Require not ip 198.51.100.5。旧语法出于向后兼容性仍然有效,但官方文档已将其标记为废弃。

常见陷阱

更多问题

文件应该放在哪里?

放在您希望控制其内容的目录中。大多数共享主机用户将其放在站点的文档根目录,根据主机不同,可能是 public_html/www/htdocs/。Apache随后会遍历目录树,将规则应用于该目录及其所有子目录。

301还是302,应该用哪种跳转?

301 Moved Permanently用于永久移动。搜索引擎会将链接权重传递给新URL;浏览器会积极缓存跳转。适用于「此页面已永久移走」的情况。302 Found用于临时跳转,浏览器不会缓存,搜索引擎不会转移排名。仅在移动确实是临时性的情况下使用302;将302作为默认选项而非301是最常见的SEO失误之一。

如何对目录进行密码保护?

创建一个 .htpasswd 文件(使用 htpasswd 命令行工具,存储 username:bcrypt-hash 格式的行),并将其保存在Web根目录之外。然后在 .htaccess 中设置:AuthType BasicAuthName "Restricted Area"AuthUserFile /full/path/to/.htpasswdRequire valid-user。浏览器会向访问该目录的任何用户显示系统Basic认证弹窗。这是经典的Apache模式;对于正式的认证需求,建议考虑应用层登录系统。

WordPress是否适用?

WordPress自带其 .htaccess 块(在 # BEGIN WordPress# END WordPress 标记之间),用于处理固定链接。当您保存固定链接设置时,WordPress会覆盖这些标记内的任何内容。请将您自己的规则添加在WordPress标记之外(通常在其上方),以使规则在自动重新生成时得以保留。

有任何内容会发送至服务器吗?

不会。生成器是一段JavaScript,根据您的复选框选择拼装指令块;输出内容在您的浏览器中构建。您的域名或所选选项均不会离开页面;页面加载后即可离线使用。

相关工具