尝试根据请求的标头值将 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