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临时重定向,避免浏览器缓存影响测试
额外注意事项
- 确保你的
/blog/目录确实存在,且里面的内容(比如单独的WordPress站点或静态内容)能正常访问 - 测试前清空浏览器缓存,因为301重定向会被浏览器缓存,旧的重定向规则可能还在生效
- 如果你的服务器没有开启mod_rewrite模块,得先联系主机商开启它
内容的提问来源于stack exchange,提问作者Divya Arya
相关产品推荐
相关产品推荐

