You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress全站重定向至子目录但/blog/路径404求助

WordPress全站重定向到子目录但保留/blog/路径的解决方案

嘿,我知道你现在卡在这个重定向问题上了——全站都跳去/new/了,但/blog/却404,这肯定超烦!问题出在你写的.htaccess规则里的正则匹配不够准确,而且没考虑到循环重定向的坑,我来给你修正一下:

问题根源

你原来的RewriteCond %{REQUEST_URI} !^(blog)(/.*)?正则有问题:它只匹配没有前置斜杠且以blog开头的请求(比如/blogpost),但不匹配/blog/或者/blog/article这种正确的路径格式,导致规则把/blog/也给重定向到/new/blog/了,自然就404了。

修正后的完整.htaccess代码

把下面的代码放在WordPress默认的重写规则之前(也就是# BEGIN WordPress注释的上方):

RewriteEngine On
RewriteBase /

# 排除/blog/相关的所有请求
RewriteCond %{REQUEST_URI} !^/blog(/.*)?$
# 排除/new/本身的请求,避免循环重定向
RewriteCond %{REQUEST_URI} !^/new(/.*)?$
# 把所有符合条件的请求重定向到/new/子目录
RewriteRule ^(.*)$ /new/$1 [L,R=301]

# 下面是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

关键说明

  • RewriteCond %{REQUEST_URI} !^/blog(/.*)?$:准确排除所有以/blog开头的路径,包括/blog、/blog/、/blog/xxx这些情况
  • 添加RewriteCond %{REQUEST_URI} !^/new(/.*)?$:防止访问/new/时被规则再次重定向到/new/new/,避免无限循环
  • [L,R=301]:L表示这是最后一条规则,R=301是永久重定向,利于SEO;如果只是测试阶段,可以改成R=302临时重定向,避免浏览器缓存影响测试

额外注意事项

  1. 确保你的/blog/目录确实存在,且里面的内容(比如单独的WordPress站点或静态内容)能正常访问
  2. 测试前清空浏览器缓存,因为301重定向会被浏览器缓存,旧的重定向规则可能还在生效
  3. 如果你的服务器没有开启mod_rewrite模块,得先联系主机商开启它

内容的提问来源于stack exchange,提问作者Divya Arya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:32:05