Apache httpd 如何为RewriteRule重定向请求设置响应头值
解决方法
出现该问题的核心原因是Apache对内部生成的响应(比如rewrite规则产生的3xx重定向、默认错误页等)会默认插入原生Server头,覆盖你已配置的Header规则,按以下步骤调整配置即可:
- 先在httpd.conf全局配置顶部添加以下参数,关闭默认的服务器详细信息输出:
ServerTokens Prod ServerSignature Off
ServerTokens Prod会将Apache原生Server头的输出内容压缩到最少,ServerSignature Off会关闭错误页、目录列表页的服务器信息展示。
- 调整原有Header规则,先清空所有场景下的原生Server头,再设置自定义值:
# 移除所有场景下的X-Powered-By字段 Header always unset X-Powered-By Header onsuccess unset X-Powered-By # 先清空always和onsuccess两个响应表中的原生Server头 Header always unset Server Header onsuccess unset Server # 为所有响应设置自定义Server头 Header always set Server "Server" Header onsuccess set Server "Server" RewriteEngine On RewriteRule ^/$ /login.do [R,L] ProxyPass / ajp://x.x.x.x:8109/ connectiontimeout=300 timeout=300 ProxyPassReverse / ajp://x.x.x.x:8109/
注意:Apache的Header指令默认作用于
onsuccess响应表(对应2xx正常响应),always对应非2xx的响应(包括3xx重定向、4xx/5xx错误等),需要同时配置两个表的规则才能覆盖所有响应场景。
- 配置修改完成后重启Apache httpd服务生效:
systemctl restart httpd
如果以上配置还是不生效,可以额外添加针对3xx状态码的强制Header规则:
Header always set Server "Server" "expr=%{REQUEST_STATUS} =~ /^3[0-9]{2}$/"
内容的提问来源于stack exchange,提问作者rajesh
相关产品推荐
相关产品推荐

