wordpress固定链接设置后404?这3招彻底解决,建站公司哪家好看这篇
改个需求建站公司拖一周,这种憋屈事儿谁没经历过?上周客户急着要上线一个安徽本地的茶叶电商站,结果刚把后台固定链接格式改成“文章名”,前台页面全炸了,全是404。打电话问外包公司,对方还在扯皮说是浏览器缓存问题。我直接扔给他一句:你服务器权限没给对,.htaccess文件根本没写进去,这叫技术不到位,别拿流程卡我。
这时候你就得问了,这种基础的技术活都搞不定,建站公司哪家好真得打个问号。别急,今天我不讲虚的,直接拆 wordpress固定链接设置后404 这个最让人头大的坑。咱们不整那些高大上的理论,就像老手带新手那样,一步步把代码、服务器配置、权限全捋顺。不管你是自己折腾的站长,还是被外包坑了想自己救火的老板,看完这篇,保你下次再遇到这种问题,能直接拍着桌子跟对方对线,或者自己动手十分钟内修好。
需求分析:为什么一改链接就404?
很多新手觉得404就是“页面不存在”,其实大错特错。在WordPress里,固定链接(Permalinks)不仅仅是改个URL后缀,它背后涉及的是服务器对请求的解析逻辑。
咱们先打个比方。你的网站就像一家安徽的徽派民宿,游客(浏览器)想进某个房间(文章页)。
- 默认链接:就像游客拿着“房间号2024”去敲门。前台(服务器)一看,好,2024号房在这,开门。
- 固定链接:游客拿着“老胡的茶室”去敲门。前台一看,咦,我房本上没写“老胡的茶室”啊,只有“2024”啊。这时候,如果前台没有一套“翻译规则”,它就直接把游客拒之门外,返回404。
这套“翻译规则”,在Linux服务器上就是Apache的mod_rewrite模块,在Nginx服务器上就是rewrite规则。
很多建站公司在交付时,图省事,用的是最基础的共享主机,或者服务器环境配置不全。当你去后台把固定链接格式改成 %postname%/ 时,WordPress会尝试向服务器写入一个 .htaccess 文件。如果服务器权限不够,或者Apache模块没开,这个文件要么写不进去,要么写进去了服务器也不认。结果就是:后台看着链接变了,前台访问全是死胡同。
根据中国互联网络信息中心(CNNIC)发布的第53次《中国互联网络发展状况统计报告》数据显示,截至2023年12月,我国网站总数达449万个。其中,中小企业自建官网占比超过60%。这意味着绝大多数站长都不是顶尖架构师,我们用的多是轻量级服务器或虚拟主机。这类环境对文件权限和模块依赖极其敏感,稍有不慎就会触发这种“隐性故障”。
所以,解决 wordpress固定链接设置后404 的核心,不是去改WordPress的代码,而是去修服务器的“翻译官”。
环境准备:动手前的自检清单
在开始改代码之前,先花两分钟确认你的环境。别盲目复制粘贴,环境不对,代码白写。
确认服务器类型 登录你的主机控制台(阿里云、腾讯云、华为云等),看清楚你的系统是 Apache 还是 Nginx。
- 如果是Apache,我们需要配置
.htaccess。 - 如果是Nginx,我们需要修改
nginx.conf或站点配置。 - 注意:国内很多廉价虚拟主机默认只开Apache,但高性能VPS现在Nginx居多。
- 如果是Apache,我们需要配置
确认文件权限 WordPress安装目录下的
.htaccess文件,权限必须允许Web服务器进程(通常是www-data或nginx)进行写入操作。- 标准权限:644(所有者读写,其他人只读)。
- 如果权限是444(只读),WordPress根本没法更新这个文件,改了后台链接也白搭。
确认PHP版本与扩展 虽然404主要跟Web服务器有关,但PHP版本过低可能导致某些插件不兼容,间接引发重定向错误。建议保持 PHP 7.4 或 8.0+。
备份!备份!备份! 这是老铁们最容易忽略的。在动任何代码之前,把整个网站目录打包下载,数据库导出SQL。万一改崩了,你还能回滚。别问我怎么知道的,问就是心疼。
核心步骤:Apache环境下的修复实操
假设你用的是最常见的 Apache 环境(这也是国内中小站点最多的环境)。
第一步:检查 mod_rewrite 是否开启
Apache 必须加载 mod_rewrite 模块,否则 .htaccess 里的重写规则全是废纸。
在服务器终端执行:
httpd -M | grep rewrite
# 或者
apache2ctl -M | grep rewrite
如果输出里有 rewrite_module,说明已开启。如果没有,去你的 httpd.conf 或 apache2.conf 里,找到 LoadModule rewrite_module,去掉前面的 # 注释号,然后重启Apache。
第二步:检查 AllowOverride 权限
这是90% 404问题的根源。Apache默认禁止 .htaccess 覆盖主配置文件,你必须手动开启目录覆盖权限。
找到你的网站根目录配置(通常在 httpd-vhosts.conf 或 sites-enabled/default 中):
<VirtualHost *:80>ServerName www.yourdomain.comDocumentRoot /var/www/html# 关键配置:允许目录使用 .htaccess 覆盖主配置<Directory /var/www/html>Options Indexes FollowSymLinks# 必须包含 All,才能覆盖重写规则AllowOverride AllRequire all granted</Directory>
</VirtualHost>
重点来了:很多人只写了 AllowOverride FileInfo,这不够!必须写 AllowOverride All,否则 Rewrite 规则不生效。
改完配置,重启Apache:
service apache2 restart
# 或者
systemctl restart httpd
第三步:手动写入 .htaccess 内容
有时候,WordPress后台保存固定链接后,因为权限问题,.htaccess 文件是空的或者内容不对。我们可以手动写。
进入网站根目录,创建或编辑 .htaccess 文件:
# BEGIN WordPress
# 这段代码是 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
注意:
RewriteBase /这一行非常重要。如果你的网站不在根目录,而在子目录(比如www.example.com/blog),这里必须改成RewriteBase /blog/。很多新手把站装到子目录,忘了改这个,结果全404。- 确保文件编码是 UTF-8 无 BOM。
代码/配置示例:Nginx环境的终极方案
现在越来越多的站长为了性能,选择 Nginx。Nginx 没有 .htaccess,它的所有重写规则都写在全局配置文件里。
如果你用的是 Nginx,改 Apache 的那套完全没用。你需要修改站点的 Nginx 配置。
找到你的站点配置文件,通常在 /etc/nginx/conf.d/yourdomain.conf 或 /etc/nginx/sites-available/yourdomain。
在 location / 块中,加入以下配置:
server {listen 80;server_name www.yourdomain.com;root /var/www/html;index index.php index.html;# 核心重写规则:处理 WordPress 固定链接location / {# 如果请求的文件或目录不存在,则交给 index.php 处理try_files $uri $uri/ /index.php?$args;}# 处理 PHP 文件location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 根据你的PHP版本修改}# 禁止访问隐藏文件(如 .htaccess, .env)location ~ /\. {deny all;}
}
关键解析:
try_files $uri $uri/ /index.php?$args;这行是灵魂。它告诉 Nginx:- 先找
$uri(直接的文件路径)。 - 找不到,找
$uri/(目录)。 - 还找不到,全部丢给
/index.php处理,并带上原始参数?args。 这就是 WordPress 能解析“老胡的茶室”这种伪静态链接的核心逻辑。
- 先找
修改完 Nginx 配置,千万别直接重启!先测试配置语法,避免服务挂掉:
nginx -t
# 输出 "syntax is ok" 和 "test is successful" 后,再执行
nginx -s reload
常见报错:这些坑你肯定踩过
1. 404 变成 403 Forbidden
现象:页面打不开,显示 403。
原因:文件权限问题。.htaccess 或 wp-content 目录权限不对,导致 Nginx/Apache 无法读取。
解决:
# 递归修改所有者为 web 用户
chown -R www-data:www-data /var/www/html
# 目录权限设为 755,文件权限设为 644
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
2. 重定向循环(Redirect Loop)
现象:浏览器提示“正在重新加载页面...”。
原因:通常是因为强制 HTTPS 配置错误,或者固定链接格式里带了多余的斜杠。
解决:
检查 .htaccess 或 Nginx 配置,确保没有重复的重写规则。比如,你既在 .htaccess 里写了强制跳转 HTTPS,又在 Nginx 层写了跳转,就会打架。
3. 子目录安装后全404
现象:网站装在 www.example.com/blog,主页能看,点文章就404。
原因:RewriteBase 没改对。
解决:
Apache: 在 .htaccess 里加 RewriteBase /blog/
Nginx: 确保 try_files 的 fallback 指向 /blog/index.php。
4. 缓存导致“假404”
现象:明明改好了,浏览器还是显示404。 原因:浏览器缓存、CDN缓存、或者服务器页面缓存插件(如 W3 Total Cache)缓存了旧的404页面。 解决:
- 按
Ctrl+F5强制刷新。 - 清除 CDN 缓存。
- 在 WordPress 后台禁用所有缓存插件,测试后再开启。
小结:技术是底线,服务是上限
折腾完这一圈,你会发现,wordpress固定链接设置后404 根本不是什么高深莫测的黑科技,它就是服务器权限、模块加载、配置文件这三兄弟没对齐。
回到开头那个问题:建站公司哪家好?
我的建议是:别光看报价,要看“交付细节”。 一个靠谱的建站团队,在交付前会做这三件事:
- 全链路测试:不仅测首页,还要测随机一篇文章、一个产品分类页、一个标签页。
- 环境标准化:明确告知你是 Apache 还是 Nginx,
.htaccess或 Nginx 配置是否已固化,而不是依赖 WordPress 后台动态生成。 - 权限自检:确保文件权限符合最小权限原则,既安全又可用。
如果对方连 AllowOverride All 是干什么的都要现查,或者一上来就让你“清缓存试试”,那大概率是新手或者外包中的外包。
技术在不断进步,WordPress 也在更新,但底层的 HTTP 协议和服务器逻辑几十年没变。掌握了这些底层逻辑,你就不再是被外包牵着鼻子走的“小白”,而是能看懂合同、能验收交付、能自己排障的“内行”。
毕竟,在这个行业里,懂技术的人,说话才有底气。
你的网站用的什么技术栈?Apache 还是 Nginx?有没有遇到过比这更坑的 404 问题?评论区聊聊,咱们互相避避坑。