使用自定义固定链接时WordPress纯数字标题文章返回404错误
WordPress纯数字标题文章404问题的原因及解决办法
核心原因
- WordPress路由解析逻辑冲突:WP默认支持通过文章ID直接访问(比如
example.com/123),当固定链接结构设为/%category%/%postname%/时,纯数字的postname会被WP优先当成文章ID去匹配,如果系统里没有对应ID的文章,就会返回404,而非按postname查找文章。 - 服务器重写规则拦截:部分服务器(如Nginx或Apache)的默认规则可能将纯数字路径识别为静态文件或其他资源请求,未将请求转发给WordPress处理,导致404。
解决办法
1. 修改WordPress内部路由判断
在主题的functions.php文件末尾添加以下代码,强制让纯数字的postname走文章标题匹配逻辑:
add_filter('request', function($query_vars) { if (isset($query_vars['name']) && is_numeric($query_vars['name'])) { $post_id = (int)$query_vars['name']; $post = get_post($post_id); // 若无对应ID的文章,按postname查询 if (!$post) { $query_vars['postname'] = $query_vars['name']; unset($query_vars['name']); } } return $query_vars; });
添加后进入WP后台→设置→固定链接,直接保存即可刷新规则。
2. 检查服务器重写规则
Apache环境
确保网站根目录的.htaccess文件包含正确的WP重写规则:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
若文件不存在可手动创建,同时确认服务器已开启mod_rewrite模块。
Nginx环境
在站点的Nginx配置文件中,确保location /块规则正确转发请求到WP的index.php:
location / { try_files $uri $uri/ /index.php?$args; }
修改后重启Nginx服务生效。
3. 调整固定链接结构
若不想修改代码或服务器配置,可给固定链接添加固定前缀,比如将结构改为/%category%/p-%postname%/,纯数字标题的文章链接会变为example.com/category/p-3333/,WP就不会把3333误判为文章ID。
内容的提问来源于stack exchange,提问作者JHope
相关产品推荐
相关产品推荐

