WordPress 默认 .htaccess 文件:代码及恢复方法
WordPress 为固定链接写入的确切默认 .htaccess 代码、每一行的作用,以及文章返回 404 但首页正常时如何恢复该文件。
WordPress 默认的 .htaccess 文件,是这款软件写入你网站根目录 .htaccess 的一段简短 RewriteEngine 代码块,目的是让 /2026/10/文章名/ 这样的固定链接正常工作,而不是返回 404。它看起来是这样的:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
这些规则来自 WordPress 用来生成该代码块的代码,并且与 WordPress 官方的 .htaccess 指南一致。WordPress 还会在 # BEGIN WordPress 之后紧接着写入三行注释,提醒标记之间的修改会被覆盖。这些注释不影响规则的运行。
安装在子文件夹时,WordPress 会把子文件夹路径同时写入 RewriteBase 和最后一条规则,例如 RewriteBase /blog/ 和 RewriteRule . /blog/index.php [L]。多站点网络使用不同的代码块,WordPress 也不会为它们自动写入这个文件。
要点速览
- 在 Apache 和 LiteSpeed 上,只要有写入权限并启用了美化固定链接,WordPress 就会生成这段代码块。打开设置 > 固定链接就够了。
- 如果文件缺失或损坏,固定链接会返回 404,而首页仍能加载,因为首页不需要重写规则。
- 你或插件添加的任何内容都要放在
# BEGIN WordPress上方,绝不要放在标记之内。WordPress 更新文件时会替换两个标记之间的全部内容。

index.php 代替了 WordPress。每一行在做什么
RewriteEngine On 为当前目录开启 Apache 的 mod_rewrite 模块;没有它,下面的重写规则都不起作用。
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 不改动 URL(- 就是这个意思),并把请求的 Authorization 请求头复制到一个服务器变量中。WordPress 读取该变量,以获取请求头中发送的用户名和密码,例如应用程序密码。
RewriteBase / 设置 Apache 用于重写后 URL 的路径前缀。WordPress 会按网站所在位置来设置它,所以安装在子文件夹时会得到 RewriteBase /blog/。
RewriteRule ^index\.php$ - [L] 是一道保护:如果请求已经是 index.php,就停止重写,让请求原样通过。
两行 RewriteCond 才是真正的逻辑。%{REQUEST_FILENAME} !-f 和 !-d 在问:“这个请求既不对应真实文件,也不对应真实目录吗?”两者都成立,最后一条规则才会触发,所以真实的图片、CSS 文件或上传的 PDF 会被直接提供,不经过 WordPress 的路由。
RewriteRule . /index.php [L] 让固定链接得以工作。通过这两个条件的所有请求都会被发送到 index.php,再由 WordPress 判断该 URL 对应哪篇文章、哪个页面或哪个归档。
WordPress 什么时候会重新生成这个文件,什么时候不会
每次加载设置 > 固定链接页面时,WordPress 都会刷新重写规则,所以打开它就够了,不必点击保存更改。如果 .htaccess 缺失,只要文件夹可写并启用了美化固定链接,WordPress 就会创建它。如果文件已存在且可写,WordPress 会替换标记之间的代码块。
以下情况这样做解决不了问题:
- 文件或其所在文件夹对运行 PHP 的用户不可写。 页面会显示错误,说明
.htaccess文件不可写,并给出要粘贴的规则。在某些主机上,运行 PHP 的系统用户与 FTP 上传文件的所有者不同,所以在 FTP 客户端里看起来没问题的权限,仍可能阻止 WordPress 写入。 - 你用的是 nginx。 WordPress 的 nginx 指南指出,nginx 没有像
.htaccess这样的目录级配置文件,WordPress 也无法更改服务器配置。对应的路由是服务器配置中的try_files指令,必须由管理员编辑。 - Apache 主配置中,你网站目录的
AllowOverride设为None。 Apache 文档写道:“This means .htaccess files are completely ignored unless you explicitly enable them for a directory.”(意思是,除非你为某个目录明确启用,否则 .htaccess 文件会被完全忽略。)WordPress 即使写出完美的文件,也不会有任何效果。重写规则需要AllowOverride FileInfo(或All),这可能需要你的主机商来更改。 - 你的固定链接设为“朴素”。 朴素 URL 不需要重写规则,所以 WordPress 不会为它们创建这个文件。
如何手动恢复它
如果文章和页面返回 404,而首页仍然正常,首先检查 .htaccess 是否缺失或损坏。分两步解决。
1. 先试一键修复。 在 wp-admin 中打开设置 > 固定链接,不做任何改动,点击保存更改。如果 WordPress 能写入文件,这样就会重新生成它。如果不能,页面会显示错误和你需要的规则。
2. 如果没有解决,就手动创建文件。 通过 FTP/SFTP 或主机的文件管理器连接,进入网站根目录,通常就是包含 wp-admin 的文件夹。检查 .htaccess 是否存在。它的文件名以点开头,有些文件管理器默认会隐藏它;请打开“显示隐藏文件”。
- 如果缺失,新建一个文件,名称必须正好是
.htaccess(没有.txt,点之前也没有任何内容)。 - 粘贴 WordPress 显示的规则,或本指南开头的默认代码块。安装在子文件夹时,要相应修改
RewriteBase和最后一条规则。 - 保存,然后重新加载一篇文章的固定链接,确认它能正常工作。
如果仍然返回 404,.htaccess 可能被忽略了。请向主机商确认 AllowOverride,因为它关闭时,Apache 连正确的文件也会忽略。
你自己的规则与 WordPress 代码块
插件或手动编辑可能会添加自己的规则,比如重定向、防盗链或缓存头。请把它们放在 WordPress 代码块之外的上方,这样它们会先于代码块中捕获所有请求的规则运行:
# 你或插件添加的规则:放在 WordPress 标记上方
<FilesMatch "\.(jpg|jpeg|png|gif)$">
# 示例:防盗链、缓存规则等
</FilesMatch>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
放在 # BEGIN WordPress 和 # END WordPress 之间的任何内容,都会在 WordPress 下次更新文件时丢失,而加载固定链接页面就足以触发更新。标记之前和之后的行会被保留。关于重定向,请参阅正确编写 WordPress .htaccess 重定向规则,了解它们该放在哪里以及如何避免循环。
编辑文件后立即出现 500 Internal Server Error,说明问题出在你刚改的内容上。Apache 文档指出,错误日志很可能会写明不被允许的指令或语法错误。从旧教程复制的规则可能导致这种情况:除非加载了 mod_access_compat,否则 Order 在 Apache 2.4 上是无效命令。先撤销修改让网站恢复,再查看错误日志。
默认代码块之外
默认代码块只处理固定链接路由和 Authorization 请求头。要收紧对敏感文件的访问,比如禁止在 /uploads 中执行 PHP,或拒绝对 wp-config.php 的直接请求,请参阅真正有用的 WordPress .htaccess 安全规则。如果固定链接因为其他原因返回 404,比如固定链接结构错误、缓存层提供旧规则或多站点子目录冲突,WordPress 固定链接不起作用会逐一讲解其他原因。
常见问题
WordPress 默认 .htaccess 文件是什么?
它是 WordPress 写入网站根目录 .htaccess 文件中、位于 # BEGIN WordPress 和 # END WordPress 之间的 RewriteEngine 代码块。它把 Authorization 请求头传递给 PHP,并把所有不对应真实文件或文件夹的请求发送到 index.php。
WordPress 默认 .htaccess 的确切代码是什么?
RewriteEngine On、一条把 Authorization 请求头传递给 PHP 的规则、RewriteBase /、一条让 index.php 直接通过的规则、两个检查请求不是真实文件或文件夹的条件,以及最后一条把其余所有请求发送到 index.php 的规则。完整代码块在本指南开头。
为什么除了首页,我的所有文章都返回 404?
Apache 上 .htaccess 文件缺失或损坏就会出现这种情况。服务器不需要重写规则也能找到首页。其他固定链接都需要这些规则才能到达 index.php,所以没有规则时,Apache 会去找一个不存在的文件并返回 404。
WordPress 会自动重新生成 .htaccess 吗?
会,前提是在带 mod_rewrite 的 Apache 或 LiteSpeed 上,已启用美化固定链接,并且 WordPress 能够写入。打开设置 > 固定链接就足以触发。文件缺失时需要文件夹可写,文件已存在时需要文件本身可写。否则页面会显示错误,并给出需要手动粘贴的规则。
为什么 nginx 没有 WordPress 的 .htaccess 文件?
nginx 没有像 Apache 的 .htaccess 那样的目录级配置文件。同样的路由要写成 nginx 服务器配置中的 try_files 规则,必须由管理员编辑,因为 WordPress 无法更改它。
保存固定链接之后,我的 .htaccess 为什么坏了?
检查是否有自定义规则被放在 # BEGIN WordPress 和 # END WordPress 标记之内。WordPress 更新文件时会替换两个标记之间的全部内容,所以那条规则会丢失。请把自定义规则放在标记上方。
参考来源
- WordPress Advanced Administration: .htaccess
- WordPress Advanced Administration: Nginx
- WordPress 源代码:class-wp-rewrite.php、options-permalink.php、misc.php、load.php、user.php、vars.php
- Apache HTTP Server 2.4:.htaccess 文件、mod_rewrite、升级到 2.4
使用免费的 WordPress .htaccess 生成器重建一份干净、正确的 .htaccess,其中包含默认固定链接代码块,以及你真正需要的安全或重定向规则。
FAQ
常见问题
WordPress 默认 .htaccess 文件是什么?
它是 WordPress 写入网站根目录 .htaccess 文件中、位于 # BEGIN WordPress 和 # END WordPress 之间的 RewriteEngine 代码块。它把 Authorization 请求头传递给 PHP,并把所有不对应真实文件或文件夹的请求发送到 index.php。
WordPress 默认 .htaccess 的确切代码是什么?
RewriteEngine On、一条把 Authorization 请求头传递给 PHP 的规则、RewriteBase /、一条让 index.php 直接通过的规则、两个检查请求不是真实文件或文件夹的条件,以及最后一条把其余所有请求发送到 index.php 的规则。完整代码块在本指南开头。
为什么除了首页,我的所有文章都返回 404?
Apache 上 .htaccess 文件缺失或损坏就会出现这种情况。服务器不需要重写规则也能找到首页。其他固定链接都需要这些规则才能到达 index.php,所以没有规则时,Apache 会去找一个不存在的文件并返回 404。
WordPress 会自动重新生成 .htaccess 吗?
会,前提是在带 mod_rewrite 的 Apache 或 LiteSpeed 上,已启用美化固定链接,并且 WordPress 能够写入。打开设置 > 固定链接就足以触发。文件缺失时需要文件夹可写,文件已存在时需要文件本身可写。否则页面会显示错误,并给出需要手动粘贴的规则。
为什么 nginx 没有 WordPress 的 .htaccess 文件?
nginx 没有像 Apache 的 .htaccess 那样的目录级配置文件。同样的路由要写成 nginx 服务器配置中的 try_files 规则,必须由管理员编辑,因为 WordPress 无法更改它。
保存固定链接之后,我的 .htaccess 为什么坏了?
检查是否有自定义规则被放在 # BEGIN WordPress 和 # END WordPress 标记之内。WordPress 更新文件时会替换两个标记之间的全部内容,所以那条规则会丢失。请把自定义规则放在标记上方。