- 刚接触WordPress的新手站长,连
.htaccess文件在哪找都不知道的小白 - 已经建站但经常遇到404、重定向循环、或者被恶意攻击的老手
- 想要从底层优化网站性能、自定义URL结构、给网站加一层免费防火墙的进阶用户
如果你属于以上任何一类,今天这篇文章就是为你写的,我会像手把手教孩子骑车一样,带你走完每一步——包括你可能会摔跤的那些坑。

WordPress htaccess 规则从零到精通,这份配置指南让你告别网站404与安全漏洞
第一步:理解.htaccess是什么(别跳过,这是地基)
.htaccess 是Apache服务器(以及部分Nginx模拟环境)下的一个配置文件,WordPress用它来管理URL重写、重定向、缓存、安全限制等,简单说,它就像网站的“交通警察”——告诉服务器哪个请求该去哪,哪个不该来。
注意:
- 这个文件默认是隐藏的(以点开头),你需要开启显示隐藏文件才能看到。
- WordPress本身在安装后会自动生成一个基本的
.htaccess,但很多场景下我们需要手动扩展它。
第二步:找到并备份你的原始文件(保命操作)
- 通过FTP(如FileZilla)连接你的服务器,进入网站根目录(通常是
public_html或www)。 - 如果看不到
.htaccess,请点击“显示隐藏文件”(FileZilla上方菜单栏“服务器” → “强制显示隐藏文件”)。 - 右键→下载,存一份到本地电脑,文件名改成
htaccess_backup_日期.txt。 - 强烈建议在修改前先复制一份到服务器上作为.bak:右键→重命名,复制一份为
.htaccess.bak。
踩坑提醒#1:很多新手直接在线编辑编辑器打开,手滑删除或加错一个符号,网站瞬间白屏,备份是王道。
第三步:完整搭建你的.htaccess规则(按顺序贴入)
下面是一份经过实战检验的完整.htaccess配置,你可以直接复制粘贴(注意替换你自己的域名),先删除原本的内容,粘贴下面的代码:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# 强制HTTPS(可选,但推荐)
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
# 缓存静态文件(加速网站)
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "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 application/x-javascript "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
</IfModule>
# 禁止访问敏感文件
<FilesMatch "^(wp-config\.php|\.htaccess|\.htpasswd|readme\.html|license\.txt)">
Order Allow,Deny
Deny from all
</FilesMatch>
# 阻止目录浏览
Options -Indexes
# 禁止访问wp-includes下的某些脚本
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
RewriteRule ^wp-content/uploads/.*\.(php|phar|phtml)$ - [F,L]
</IfModule>
说明:
- BEGIN WordPress段:这是固定链接结构的基础,不要删。
- 强制HTTPS:如果你的站点已启用SSL,这一行保证用户总是走加密通道。
- 缓存规则:大幅度提升加载速度,浏览器会缓存图片、CSS、JS。
- 禁止访问敏感文件:wp-config.php是WordPress的命脉,必须挡住。
- 阻止目录浏览:防止别人看到你服务器上的文件列表。
- 上传目录禁止执行PHP:常见安全漏洞之一是通过图片上传写入木马。
第四步:配置要点(顺序和语法决定成败)
-
代码顺序不能乱:
RewriteEngine On必须写在所有Rewrite规则最前面,且只写一次(除了特殊区块)。Options -Indexes最好放在文件开头,比Rewrite规则先执行。- 拒绝访问的规则(Deny from all)应放在允许规则之后,否则把自家也封了。
-
注意斜杠和百分号:
%{HTTP_HOST}是变量,不能写成%{HTTP_HOST}少了括号?实际上标准写法是%{HTTP_HOST},多一个花括号都不行。- 重定向时
$1代表匹配的括号内内容,请确保 和 正确闭合。
-
逐条开启并测试:
不要一次性把所有规则堆进去,建议先只放基础WordPress段,访问正常后再加入HTTPS强制,再测试缓存,最后加安全规则,每加一条都打开网页看看是否报500错误。
配置要点#1:如果你用的是Nginx服务器(很多云主机默认),请忽略
.htaccess——Nginx不认这个文件,你需要把规则写在nginx配置文件中,不确定就查一下主机面板。
第五步:常见踩坑提醒(我已经替你摔过了)
坑1:加了规则后网站白屏/500错误
原因:语法错误,或者某条规则中的模块(如mod_rewrite)未开启。
解决:
- 通过FTP将
.htaccess重命名为.htaccess_disabled,网站恢复正常。 - 然后逐条检查:最常见的是
RewriteBase /写成了RewriteBase /少了空格?或者[L]前面的空格? - 在本地用纯文本编辑器(如Notepad++)编辑,不要用Word或记事本,避免不可见字符。
坑2:无限重定向循环(ERR_TOO_MANY_REDIRECTS)
原因:HTTPS强制规则与CDN或反向代理冲突,或者你本地也开启了SSL但是代码判断错了。
解决:
- 先注释掉强制HTTPS那段,如果好了,说明你的服务器已经通过其他方式(如Cloudflare的Flexible SSL)处理了,不需要重复。
- 或者在前面加个条件:
RewriteCond %{HTTP:X-Forwarded-Proto} !https来判断代理传递的协议。
坑3:固定链接不生效,文章页面全404
原因:WordPress的 # BEGIN WordPress 段被删除或损坏,或者 AllowOverride 未开启。
解决:
- 登录WordPress后台→设置→固定链接→直接点“保存更改”(什么都不改也行),WordPress会自动重建
.htaccess。 - 如果还没好,检查你的Apache主机是否允许.htaccess文件覆盖设置,联系主机商开启
AllowOverride All。
坑4:上传图片后打不开,或者下载.php文件
原因:安全规则误伤了正常文件。^wp-content/uploads/.*\.(php|phar|phtml)$ 这个禁止执行脚本的规则,如果上传了合法的.php文件(极少见),会被拒绝。
解决:
- 如果你没有特殊需求,这条规则可以保留,如果真的有必要上传php文件(比如某些插件),把那条规则注释掉。
最后一句忠告
.htaccess 是一把双刃剑,改得好,网站快、安全、优雅;改不好,网站崩、用户溜、谷歌降权,每修改一次,请务必:
- 在测试环境(本地或子目录)先试。
- 用在线
.htaccess验证工具(如htaccess.madewithlove.com)检查语法。 - 保持文件权限为644(别改成777)。
现在就打开你的FTP,把上面的代码复制进去,保存,刷新你的网站,如果一切正常——恭喜,你已经从“只会用插件”的初级站长,迈入了“能自己调服务器”的进阶阶段,如果出了问题,别慌,找回你的备份,重来一次,每个老站长,都是在500错误里摔大的。
发表评论