Apache 2.4 根据 Header 值重写规则

Apache 2.4 根据 Header 值重写规则

尝试根据请求的标头值将 http 转换为 https,但失败了。有人可以帮我吗?

请求是如果标头值为 xyz 并且等于 Y,则提供 http 页面,对于所有其他请求,提供 https 页面。我立即在代理模块内有另一个必须执行的条件,但它无法执行。也无法在错误日志中看到重写的日志跟踪。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP:xyz} !=Y [NC] --> if header contains xyz and its value is not equal to Y
    Rewrite ^/?(.*) https://%{SERVER_NME}/$1 [R,L] --> server https page.
    LogLevel alert mod_rewrite.c:trace3 --> Log the rewrite activity.

<IfModule mod_proxy_http.c> --> after above activity is completed continue this activity.
    RewriteCond ... 
    RewriteCond ...
    RewriteRule ...
<Ifmodule>
<IfModule>

Apache 版本:2.4

答案1

我只是修复了您的问题RewriteRule并添加了额外的协议检查。如果您的 HTTP 和 HTTPS 虚拟主机不同,则可以删除协议检查。只是想确保如果您已经在 HTTPS 站点上,则没有重定向循环。

RewriteEngine On
# make sure we only redirect if protocol is HTTP, remove if not needed
RewriteCond %{HTTPS} =off
RewriteCond %{HTTP:xyz} !=Y [NC]
RewriteRule (.*) https://%{SERVER_NAME}$1 [R,L]

为了检查标题是否有效,我使用了wget

# redirect to HTTPS
wget -S -O - --header='xyz:foo' http://localhost

# stay on HTTP
wget -S -O - --header='xyz:y' http://localhost

相关内容