如何在.htaccess中移除URL中的ID?WordPress环境失效问题
解决WordPress中带ID的URL重定向失效问题
嘿,我来帮你搞定这个头疼的重定向问题!作为正则新手不用慌,我们一步步来:
第一步:匹配你的URL结构,写对正则规则
首先得明确你的URL具体格式,我给你两种最常见的场景,你可以直接套用或调整:
场景1:URL是「分类/ID/」,要重定向到「分类/」
比如原URL是 https://你的站点.com/tech/123/,要转到 https://你的站点.com/tech/,用这条规则:
RewriteRule ^([^/]+)/[0-9]+/?$ /$1/ [L,R=302]
场景2:URL是「分类/ID-文章名/」,要重定向到「分类/文章名/」
比如原URL是 https://你的站点.com/tech/123-my-awesome-post/,要转到 https://你的站点.com/tech/my-awesome-post/,用这条规则:
RewriteRule ^([^/]+)/[0-9]+-(.*)/?$ /$1/$2/ [L,R=302]
小贴士:先暂时用
R=302临时重定向,确认生效后再改成R=301永久重定向,避免浏览器缓存旧规则坑到你。
第二步:解决WordPress中规则不生效的核心问题
测试工具显示规则正常但站点里没用?90%是因为你把规则放错位置了!WordPress的.htaccess有专属的规则块,自定义重定向必须放在它前面,否则会被WordPress的规则拦截。
给你一个完整的.htaccess示例,照着放:
# 自定义重定向规则 - 一定要放在WordPress规则块之前! RewriteEngine On # 这里替换成你需要的那条规则(比如上面的场景1或2) RewriteRule ^([^/]+)/[0-9]+-(.*)/?$ /$1/$2/ [L,R=302] # 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
额外检查项(避免踩坑)
- 保存.htaccess后,去WordPress后台「设置→固定链接」页面,啥也不用改,直接点保存,让WordPress刷新一下规则缓存。
- 如果你用了缓存插件(比如WP Rocket、W3 Total Cache),一定要清空站点缓存,不然旧的URL会被缓存住。
- 确认你的主机开启了
mod_rewrite模块(大部分主流主机默认都开了,要是没开,联系主机客服开启就行)。
内容的提问来源于stack exchange,提问作者NILL
相关产品推荐
相关产品推荐

