如何在数据库修复WordPress短链接导致的404错误_Rewrite rules重写

大萱姑娘_6364

大萱姑娘_6364

2026-05-07

776人浏览

原创

wordpress短链接404主因是服务器未正确转发/p/123类请求至index.php:apache需开启allowoverride all并确保mod_rewrite加载,nginx须手动配置location /块及try_files规则,.htaccess对nginx无效;同时需检查rewrite_rules选项是否正常、安全插件是否锁定文件、缓存是否误存404。

wordpress 短链接 404 是因为 .htaccess 重写规则没生效或被覆盖

不是插件坏了,也不是数据库丢了数据,而是 apache/nginx 没把 /p/123 这类短链接正确转发给 wordpress 的 index.php。常见现象是:后台能正常编辑文章,但点击短链接直接跳 404 页面,且 wp-admin/options-permalink.php 里点“保存更改”也没用。

原因通常是:.htaccess 文件权限不对、服务器未启用 mod_rewrite、或者 Nginx 根本不读 .htaccess(它压根不支持)。如果你用的是宝塔、cPanel 或阿里云轻量应用服务器,大概率是后者。

  • Apache 用户检查 AllowOverride All 是否在虚拟主机配置里开启(不是只在 httpd.conf 全局开,得在对应 <directory></directory> 块里)
  • Nginx 用户必须手动补全重写规则,.htaccess 文件完全无效
  • Windows 主机(IIS)要用 web.config,不是 .htaccess

Apache 下确认 .htaccess 规则是否被 WordPress 正确生成

WordPress 的短链接依赖 rewrite_rules 数据库选项和 .htaccess 文件双配合。如果 wp_options 表里的 rewrite_rules 是空的或过期的,flush_rewrite_rules() 就不会输出有效规则。

执行前先备份 .htaccess,再进 WP-CLI 或主题函数里临时加一行:

flush_rewrite_rules();

然后立刻检查根目录下的 .htaccess 文件内容是否包含类似这样的段落:

<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</ifmodule>
  • 如果没有 <ifmodule mod_rewrite.c></ifmodule> 包裹,说明 mod_rewrite 模块没加载,联系主机商启用
  • 如果 RewriteBase 写成了 /subdir/ 但实际在根目录,会导致所有重写失败
  • 某些安全插件(如 Wordfence)会自动锁定 .htaccess,改完也写不进去,需先暂停插件

Nginx 用户必须手动配置 location 块处理短链接

Nginx 不解析 .htaccess,WordPress 的 flush_rewrite_rules() 对它完全没用。短链接如 /p/123 要能访问,必须让 Nginx 把所有非静态资源请求都转给 index.php。

Word Handler
Word Handler

创建、读取和编辑Word文档(.docx),支持模板、表格和样式。

下载

在站点配置文件的 server 块里,确保有这段(不是放在 location / 里,而是独立的 location):

location / {
    try_files $uri $uri/ /index.php?$args;
}
  • 别漏掉 $args,否则 ?p=123 这种参数式短链会丢参
  • 如果用了缓存(如 fastcgi_cache),要排除 /p/ 开头的路径,否则缓存了 404 就很难清
  • 某些一键安装包(如 LNMP.org)默认配置里只有 location ~ \.php$,不处理短路径,必须补上上面的 location /

数据库里 wp_options 的 rewrite_rules 字段异常怎么办

这个字段存的是序列化数组,记录了所有 URL 到 query vars 的映射。如果它损坏(比如被插件误删、手动清空、或 PHP 反序列化失败),短链接路由就彻底失效,即使 .htaccess 或 Nginx 配置都对,也会 404。

不要直接在 phpMyAdmin 里手填,容易格式错。稳妥做法是:

  • 停用所有重写相关插件(如 Redirection、Permalink Manager)
  • 在 WP-CLI 执行:wp rewrite structure '/%postname%/'(先切回普通结构)
  • 再执行:wp rewrite structure '/p/%post_id%/'(切回短链结构)
  • 最后:wp rewrite flush —— 这会重新生成并写入 rewrite_rules

如果 wp rewrite 命令报错,说明 WordPress 核心文件可能被篡改,优先检查 wp-includes/rewrite.php 是否完整。

短链接机制本身不存具体跳转关系在数据库里,它靠规则匹配 + get_post() 动态查 ID。所以修复重点永远在重写引擎层,而不是去翻 wp_posts 表找哪条记录对应 /p/123。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

word wordpress

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4203

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

891

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1089

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6101

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

2983

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6080

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

8181

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1110

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

972

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何在 Windows 11 上安装 XAMPP
如何在 Windows 11 上安装 XAMPP

共1课时 | 211人学习

第二十三期_前端开发
第二十三期_前端开发

共98课时 | 11.7万人学习