WordPress修改URL移除查询参数后出现404错误求助
解决WordPress自定义友好URL的404问题
你当前的.htaccess规则只完成了外部重定向(把旧的带查询参数的URL跳转到友好URL),但没有配置内部重写——当用户直接访问友好URL时,服务器不知道要把它映射回原有的查询参数格式,导致WordPress无法识别这个路由,返回404错误。
修复步骤:
- 修改你的
.htaccess文件,在现有规则之后添加内部重写规则,并且要把这些规则放在WordPress默认的重写规则(# BEGIN WordPress块)之前:
RewriteEngine ON # 外部重定向:把旧URL跳转到友好URL RewriteCond %{THE_REQUEST} \s([^?]*)\?name=(\S+)\s [NC] RewriteRule ^ %1/%2? [R=301,L] # 内部重写:把友好URL映射回原查询参数(不改变浏览器显示的URL) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^offer/([^/]+)/?$ /offer/?name=$1 [L,QSA] # WordPress默认重写规则(不要修改下面的块) # 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
确保你的WordPress固定链接设置不是默认的“朴素”格式:
- 进入WordPress后台 → 设置 → 固定链接
- 选择除“朴素”外的任意格式(比如“文章名”),保存设置。这会确保WordPress的重写规则正常生效,同时不会和我们自定义的规则冲突。
验证自定义页面模板:
确保你的offer自定义页面模板中,依然能通过$_GET['name']获取到产品名称参数——内部重写后,这个参数会被正常传递给WordPress的页面处理逻辑。
规则说明:
RewriteCond %{REQUEST_FILENAME} !-f和RewriteCond %{REQUEST_FILENAME} !-d:确保只有当请求的不是真实文件或目录时,才执行重写规则,避免影响服务器上的真实资源。RewriteRule ^offer/([^/]+)/?$ /offer/?name=$1 [L,QSA]:把/offer/xxx或/offer/xxx/(末尾带斜杠)的请求,内部重写为/offer/?name=xxx,QSA标志会保留原URL中可能存在的其他查询参数(如果有的话)。
内容的提问来源于stack exchange,提问作者Matredok
相关产品推荐
相关产品推荐

