.htaccess 生成器
在线生成 Apache .htaccess 配置。支持强制 HTTPS、浏览器缓存、禁止目录浏览、自定义重定向,无需注册,即用即走。
- 在浏览器中处理
- 数据不离开你的设备
- 免费 · 无需注册
用微信扫描以下二维码即可分享
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。
各配置区域生成什么
- 强制 HTTPS:在
%{HTTPS}为off时,用 RewriteRule 把请求 301 重定向到同一主机的https://地址,需要mod_rewrite。规则包在<IfModule mod_rewrite.c>里,服务器没有加载该模块时这段不生效,也不会报错。 - WWW 重定向:统一成带
www.或不带www.的一种写法。重定向目标始终是https://,即使关闭了“强制 HTTPS”也一样。 - 目录索引:请求目录时 Apache 依次查找的默认文件,默认值为
index.php index.html index.htm;输入框为空或只有空格时写成index.php index.html。文件名之间的全角空格按半角空格处理,因为 Apache 只按半角空白分隔文件名。 - 浏览器缓存:用
mod_expires为图片、CSS/JS 和字体发送Expires与Cache-Control: max-age。每种 MIME 类型各写一行ExpiresByType,Apache 返回的类型不在列表里时,该文件就没有缓存头。 - 安全:禁止目录浏览(
Options -Indexes),用Require all denied拒绝直接访问.htaccess和.env。可选的响应头有X-Content-Type-Options: nosniff、X-Frame-Options: SAMEORIGIN、Referrer-Policy: strict-origin-when-cross-origin,以及按 OWASP HTTP Headers Cheat Sheet 建议关闭旧版浏览器 XSS 过滤器的X-XSS-Protection: 0,默认不勾选。 - 自定义重定向:来源路径和目标 URL 都填写后,生成一条 Apache
Redirect指令,状态码可选 301 或 302。
示例:默认选项的输出
打开页面不做任何修改,输出如下(强制 HTTPS、目录索引、浏览器缓存,以及安全区域的前三项)。把它放进 Apache 2.4.67、目录设为 AllowOverride All,用 HTTP 请求 /,返回 301。去掉 HTTPS 一段后再测:.ttf 文件带 Cache-Control: max-age=31536000(1 年),/.env、/.htaccess 和没有首页文件的目录都返回 403。
# Force HTTPS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# Directory Index
DirectoryIndex index.php index.html index.htm
# Browser Caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType font/woff "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType font/ttf "access plus 1 year"
ExpiresByType application/x-font-ttf "access plus 1 year"
ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
</IfModule>
# Security
Options -Indexes
<Files ".htaccess">
Require all denied
</Files>
<Files ".env">
Require all denied
</Files>
字体同时列出 font/ttf 和 application/x-font-ttf:Apache 2.4 自带的 mime.types 把 .ttf 映射为 font/ttf,较旧的配置用的是带 x- 的名字,只写其中一个,另一种服务器上的 TTF 文件就拿不到缓存头。
示例:在阿里云虚拟主机上把中文栏目迁到新地址
先确认主机类型。阿里云的文档写明,Linux 普通版云虚拟主机的 Web 服务是 Apache,伪静态规则写在站点根目录 /htdocs 下的 .htaccess 里;增强版的 Web 服务是 Nginx 1.18,不支持通过 .htaccess 设置伪静态,要在控制台“高级环境设置 → NGINX设置”里写规则(使用 URL Rewrite 配置伪静态、配置 Nginx 文件)。控制台自带的 301 重定向在普通版上只支持网站首页(设置 301 重定向),所以普通版上要重定向某个栏目,用 .htaccess 里的 Redirect 更直接。
假设旧站的“关于我们”页面路径是中文 /关于我们,要永久重定向到 https://example.cn/about/,同时去掉 www。在工具里勾选“WWW 重定向”和“自定义重定向”,然后展开“选项”:选“去除 www”,来源路径填 /关于我们、目标 URL 填 https://example.cn/about/、类型选“301 永久重定向”。输出中新增的两段是:
# Remove www
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [L,R=301]
</IfModule>
# Custom Redirect
Redirect 301 /关于我们 https://example.cn/about/
浏览器发出的请求路径是百分号编码的 /%E5%85%B3%E4%BA%8E%E6%88%91%E4%BB%AC。Redirect 文档说明来源路径按解码后的形式比较,所以 .htaccess 里直接写中文即可,前提是文件以 UTF-8 保存。在 Apache 2.4.67 中实测,这个请求得到 301,Location 为 https://example.cn/about/。Redirect 是前缀匹配,会把剩余部分接在目标后面:/关于我们/team 被重定向到了 https://example.cn/about//team,中间多了一个斜杠。来源和目标的结尾斜杠保持一致(都写或都不写)就能避免。
阿里云文档的操作步骤里,示例文件先以 htaccess 的名字通过 FTP 传到 /htdocs,再重命名为 .htaccess。文档还提醒 .htaccess 是隐藏文件,要在 FTP 客户端里打开显示隐藏文件才能看到;目录里已有 .htaccess 时,先下载到本地备份。
限制与常见错误
- 500 Internal Server Error:
.htaccess里的每条指令都要被该目录的 AllowOverride 允许。在AllowOverride FileInfo下,仅Options -Indexes一行就让整个目录返回 500。 - 所有页面都是 403:
.htaccess中的RewriteRule需要Options FollowSymLinks或SymLinksIfOwnerMatch,两者都关闭时,Apache 拒绝所有经过该规则的请求(错误日志 AH00670)。 - CDN 或负载均衡后面无限重定向:
%{HTTPS}描述的是 Apache 自己收到的连接。前面的代理终止 TLS、再用 HTTP 转给 Apache 时,这个变量永远是off,强制 HTTPS 会一直重定向。这种情况在代理上强制 HTTPS,或改为判断代理设置的请求头。 - 强制 www 会作用到子域名:规则给所有不以
www.开头的主机加前缀,blog.example.cn会被重定向到www.blog.example.cn,IP 地址也会被加上。只有站点只用主域名时才适合开启。 - 只保护完全同名的文件:
.env块只拦截名字正好是.env的文件,.env.local、.env.production仍会被返回,这类文件应放在网站根目录之外。 - 来源路径必须以斜杠开头:Redirect 文档要求旧路径以
/开头、不允许相对路径。Redirect 301 old-page …在 Apache 2.4.67 中加载时不报错,但请求/old-page不会重定向。因此来源路径不以/开头时,工具不写出这条重定向,并在“复制”下方的状态行提示;其他规则照常可以复制。 - 路径中间不能有空格:来源路径或目标 URL 中间有空格时,
Redirect行会变成 4 个参数,Apache 2.4.67 对整个目录返回 500(错误日志写“Redirect takes one, two or three arguments”)。工具会提示并不写出这一行。目标 URL 里的空格写成%20;来源路径确实含空格时,手动编辑文件并给路径加引号(Redirect 301 “/old page” …在同一测试中可以重定向)。 - 每次只生成一条自定义重定向,需要多条时复制
Redirect行再修改。没有 Basic 认证、CORS、gzip/Brotli 压缩这些区域;需要密码保护目录时,可以用 htpasswd 生成器生成凭据文件。
FAQ
.htaccess 文件是什么?
.htaccess 是 Apache Web 服务器按目录读取的配置文件。不改主配置文件,也能为某个目录设置 URL 重定向、缓存规则、访问控制和安全响应头。Apache 只执行该目录的 AllowOverride 允许的指令。
这些配置在 Nginx 或其他服务器上有效吗?
.htaccess 是 Apache 的格式(LiteSpeed 也会读取)。Nginx 使用另一套配置语法,不读取 .htaccess 文件。服务器是 Nginx 时,需要把这些规则改写成 nginx.conf 里的指令。
上传文件后网站返回 500 Internal Server Error,是什么原因?
.htaccess 里出现了该目录的 AllowOverride 不允许的指令时,Apache 返回 500。例如 AllowOverride 不含 Options 时写了 Options -Indexes,错误日志会写明“Options not allowed here”。删掉这一行,或请主机商放开该指令。
拒绝访问 .htaccess 本身是否安全?
安全,即使服务器已经这样设置也不冲突:Apache 2.4 自带的 httpd.conf 里本来就有 <Files ".ht*"> 加 Require all denied 的配置。生成的块用的是同样的 Apache 2.4 指令 Require(mod_authz_core)。Apache 2.2 的 Order / Deny 写法在 2.4 中要加载 mod_access_compat 才能用。
301 和 302 重定向有什么区别?
301 是永久重定向,浏览器和搜索引擎会缓存它并更新链接。302 是临时重定向,客户端每次都会重新请求原地址。更换域名或统一规范网址用 301,短期重定向用 302。
我填写的配置会被发送或保存吗?
不会。文件在你的浏览器页面里根据所选项生成,选项不会发送到服务器,也不会写入浏览器存储,刷新页面后恢复默认值。点击“复制”时,网站统计只记录工具名和动作,不记录路径、网址或文件内容。