Apache可以有条件地从自定义http标头执行重写吗?


12

我在(简单的亚马逊)负载均衡器后面有一个apache服务器。我想将所有不是443的传入流量重定向到443。我希望它仅使用一个apache虚拟主机。所以我试图检测是否HTTP_X_FORWARDED_PORT标头不是443。

我已经检查了RewriteCond文档,它仅适用于一组有限的HTTP标头。

基本上我在做什么是这样的:

<VirtualHost *:80>
        ServerName www.example.com

        RewriteEngine On
        RewriteCond %{HTTP_X_FORWARDED_PORT} !=443
        RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

        ....
</VirtualHost>

但是RewriteCond无法识别HTTP_X_FORWARDED_PORT。

是否有其他方法(仅使用一个VirtualHost)来完成此操作?(某种类型的传入标头检查?)

谢谢,兰斯

Answers:


13

再往下一点RewriteCond

%{HTTP:header},其中header可以是任何HTTP MIME-header名称

因此,您可以做到这一点,只是形式与预提取的标头不同。

尝试这个:

RewriteCond %{HTTP:X-Forwarded-Port} !=443
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

1
另一个由SiteLock CDN传递的标头中带有IP地址的示例:RewriteCond %{HTTP:X-Forwarded-For} !=123.45.67.89
Liam
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.