仅当查询参数不等于某个值时,htaccess 中的 HTTPS 重定向

仅当查询参数不等于某个值时,htaccess 中的 HTTPS 重定向

背景

.htaccess通过在我的文件中包括这段代码,我已成功使我的 Wordpress 安装中的 http 到 https 重定向正常工作:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

我在 Google Cloud 环境中运行,问题是健康检查要求“健康检查资源”返回200 OK。健康检查发出未X-Forwarded-Proto设置标头的 HTTP 请求,因此 Apache 将响应301,因此健康检查失败(它不遵循重定向)。不幸的是,无法在 Google Health Checker 中定义标头,所以我无法将标头伪造X-Forwarded-Proto为“https”。因此,我希望解决方法是在健康检查路径中提供一个查询参数,并将文件配置.htaccess为仅在指定的查询参数未定义(或等于 false 或类似值)时重定向。

问题

我怎样才能修改RewriteCond(我假设)仅在X-Forwarded-Proto标头不相等时执行重定向https(如上例所示)查询字符串不包含参数healthCheck=true

答案1

你能试试这个吗?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{QUERY_STRING} !.*healthCheck=true.*
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

看一眼https://stackoverflow.com/questions/4824964/rewritecond-in-htaccess-with-negated-regex-condition-doesnt-workhttps://wiki.apache.org/httpd/RewriteQueryString

相关内容