WordPress Nginx固定链接从Plain改Postname遇404错误求助
嘿,我看你在把WordPress的固定链接从纯静态的http://sitename/?p=123改成Postname格式的http://sitename/postname后,碰到了Nginx返回404的问题,这情况太常见了,咱们一步步来搞定它~
核心问题
Nginx不像Apache会自动读取.htaccess里的重写规则,所以咱们得手动在Nginx服务器块里添加专门的rewrite规则,让所有友好URL请求都转发给WordPress的index.php来处理。
修改后的完整Nginx服务器块配置
我把你的配置补全并加上关键规则,你可以参考这个来调整:
server { listen 80; listen 443 ssl; root /var/www/sitename/html; index index.php index.html index.htm; server_name sitename www.sitename; client_max_body_size 10M; # Certificates handled by CertBot ssl_certificate /path/to/your/cert.pem; # 替换成CertBot生成的证书实际路径 ssl_certificate_key /path/to/your/privkey.pem; # 替换成你的密钥实际路径 # 关键:处理WordPress友好URL的重写规则 location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_index index.php; # 必须添加的参数:让PHP-FPM能正确定位脚本文件 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 可选:禁止访问WordPress敏感隐藏文件 location ~ /\.ht { deny all; } }
关键步骤说明
第一步:确认WordPress后台设置
先登录WordPress后台,进入「设置」→「固定链接」,确保已经选中「文章名称」选项并保存设置。这一步会让WordPress生成对应的URL结构,但需要Nginx配合转发请求。第二步:添加重写规则
上面配置里的location /块是核心逻辑:它会先尝试访问请求的文件或目录,如果找不到,就把请求转发给index.php并带上原请求的参数,这样WordPress就能解析出对应的文章内容了。第三步:检查PHP配置完整性
你的PHP块里一定要包含fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;,否则PHP-FPM可能无法正确定位到WordPress的PHP文件,导致请求失败。第四步:测试并重启Nginx
修改完配置后,先测试配置是否合法:sudo nginx -t如果输出
test is successful,就重启Nginx让配置生效:sudo systemctl restart nginx
做完这些,你的Postname格式固定链接应该就能正常访问了,不会再出现404错误啦~
内容的提问来源于stack exchange,提问作者Ben Chiciudean

