如何用Nginx将WordPress博客/blog/下.html后缀文章重定向到/blog/es/子目录
解决方案
方案1:Apache 服务器(.htaccess配置)
将以下规则添加到/blog目录下的.htaccess文件顶部,优先级要高于WordPress默认的重定向规则:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /blog/ # 排除已带有语言前缀的路径,避免循环重定向 RewriteCond %{REQUEST_URI} !^/blog/(es|en|fr)/ [NC] # 仅匹配/blog目录下直接以.html为后缀的请求 RewriteRule ^([^/]+\.html)$ /blog/es/$1 [L,R=301,NC] </IfModule>
测试阶段可以将R=301改为R=302,避免浏览器缓存错误的重定向规则,确认生效后再改回301
方案2:Nginx 服务器配置
将以下规则添加到站点Nginx配置的server块中,放在其他location规则之前:
location ^~ /blog/ { # 排除已带有语言前缀的路径 if ($request_uri !~* ^/blog/(es|en|fr)/) { # 匹配.html后缀的请求并重定向 rewrite ^/blog/([^/]+\.html)$ /blog/es/$1 permanent; } # 原有WordPress、Polylang相关配置保持不变即可 }
配置修改完成后执行nginx -s reload重载配置生效。
方案3:WordPress插件配置(无需修改服务器文件)
你可以使用Redirection等WordPress重定向插件实现需求,添加规则如下:
- 源URL匹配模式:
^/blog/([^/]+\.html)$(选择正则匹配) - 目标URL:
/blog/es/$1 - 额外匹配条件:排除请求路径包含
/blog/es/、/blog/en/、/blog/fr/的情况 - 重定向类型选择301永久重定向
验证注意事项
配置完成后清理浏览器缓存再进行测试,确认:
- 原
/blog/xxx.html路径可以正常跳转到/blog/es/xxx.html - 多语言前缀路径、后台管理路径访问不受影响
- 非.html后缀的路径不会被误重定向
内容的提问来源于stack exchange,提问作者PauGNU
相关产品推荐
相关产品推荐

