背景
.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-work和https://wiki.apache.org/httpd/RewriteQueryString。