含非拉丁字符的URL重定向规则修正求助
编码URL的重定向规则修正问题
问题场景
需要对两类包含保加利亚语“автор”(对应英文author)编码的URL做301重定向至统一目标,但现有规则未达到预期:
场景1:一次编码URL
- 需要重定向的URL:
注:https://example.com/bg/%D0%B0%D0%B2%D1%82%D0%BE%D1%80/author-name%D0%B0%D0%B2%D1%82%D0%BE%D1%80是“автор”的URL编码 - 当前Rewrite规则:
RewriteRule ^bg/%D0%B0%D0%B2%D1%82%D0%BE%D1%80/(.*)$ https://example.com/bg/author/$1 [L,R=301] - 实际重定向结果:
https://example.com/bg/автор/author-name - 期望重定向结果:
https://example.com/bg/author/author-name
场景2:二次编码URL
- 需要重定向的URL:
注:https://example.com/bg/%25D0%25B0%25D0%25B2%25D1%2582%25D0%25BE%25D1%2580/author-name%25D0%25B0%25D0%25B2%25D1%2582%25D0%25BE%25D1%2580是“автор”的二次URL编码(编码后的字符串再次被编码) - 当前Rewrite规则:
RewriteRule ^bg/%25D0%25B0%25D0%25B2%25D1%2582%25D0%25BE%25D1%2580/(.*)$ https://example.com/bg/author/$1 [L,R=301] - 实际重定向结果:
https://example.com/bg/%D0%B0%D0%B2%D1%82%D0%BE%D1%80/author-name - 期望重定向结果:
https://example.com/bg/author/author-name
核心问题
测试发现%D0%B0%D0%B2%D1%82%D0%BE%D1%80、автор、%25D0%25B0%25D0%25B2%25D1%2582%25D0%25BE%25D1%2580三种形式存在自动转换/重定向,导致现有规则无法直接生效,需要同时支持这三类URL的重定向。
解决方案
问题根源在于Apache的RewriteRule默认匹配解码后的URL路径,而非原始编码字符串;同时二次编码的URL会先被自动解码一次,再进入规则匹配流程。
使用以下规则可统一处理所有相关形式的URL:
# 处理一次编码(含二次编码自动解码后的情况) RewriteRule ^bg/%D0%B0%D0%B2%D1%82%D0%BE%D1%80/(.*)$ https://example.com/bg/author/$1 [L,R=301,NE] # 处理已解码为保加利亚语原词的情况 RewriteRule ^bg/автор/(.*)$ https://example.com/bg/author/$1 [L,R=301,NE]
规则说明:
NE(NoEscape)标志:禁止Apache对目标URL中的字符自动编码,确保重定向目标始终是author,不会被转回保加利亚语编码或原词。- 规则顺序:先匹配一次编码路径(覆盖二次编码自动解码后的场景),再匹配原词路径,确保所有变体都被捕获。
无论用户访问的是二次编码、一次编码还是已解码的原词URL,都会直接重定向到预期的/bg/author/author-name路径。
内容的提问来源于stack exchange,提问作者Advanced SEO
相关产品推荐
相关产品推荐

