Fastly+Adobe AEM(cloud)配合Apache Rewrite规则按x-aem-client-country跳转失效问题
你的Rewrite规则本身不存在语法错误,未生效是Adobe AEM Dispatcher(Apache)场景下的典型配置冲突问题,常见原因和修复方案如下:
常见失效原因
- Dispatcher请求头白名单限制
Dispatcher默认会过滤未在/clientheaders配置中声明的请求头,你在AEM Servlet中能拿到请求头只能说明头被转发到了后端AEM实例,但Apache Rewrite模块处理规则时,需要先在dispatcher配置的clientheaders段添加x-aem-client-country头,Apache层才能读取到该值用于规则判断。 - 规则执行优先级问题
如果存在其他Rewrite规则在当前规则前执行,且携带了[L]终止标记,会导致当前国家校验规则未被触发。建议将本条规则移至虚拟主机配置的所有Rewrite规则最顶部测试。 - 头值匹配容错不足
部分场景下请求头可能携带不可见的空白字符,原规则的严格匹配会失效,可以调整匹配规则增加容错。 - SSL终止导致跳转异常
由于你站点的SSL在外部终止,Apache侧拿到的是HTTP请求,默认跳转可能返回HTTP协议的错误页地址,如果站点有强制HTTPS的配置,会导致跳转逻辑被覆盖,出现规则未生效的假象。
修复步骤
- 先更新dispatcher配置,添加请求头白名单:
/clientheaders { "x-aem-client-country" # 保留原有其他已配置的允许头 }
- 调整Rewrite规则如下,建议放在
块下的最顶部:
RewriteEngine On # 测试阶段可开启rewrite日志确认头取值,正式环境关闭 # LogLevel alert rewrite:trace3 # 增加空白字符容错、匹配忽略大小写 RewriteCond %{HTTP:x-aem-client-country} !^GB\s*$ [NC] # 错误页路径精确匹配、忽略大小写 RewriteCond %{REQUEST_URI} !^/uk/en/errors/location-error.html$ [NC] # 跳转显式指定HTTPS协议,适配外部SSL终止场景 RewriteRule ^.*$ https://%{HTTP_HOST}/uk/en/errors/location-error.html [R=307,L]
- 重启Apache和dispatcher服务后验证规则生效情况。
内容的提问来源于stack exchange,提问作者John Little
相关产品推荐
相关产品推荐

