Назад | Перейти на главную страницу

Перенаправление HTTPS в htaccess только когда параметр запроса не равен чему-то

Задний план

Мне удалось заставить перенаправление http на https работать для моей установки Wordpress, включив этот фрагмент в свой .htaccess файл:

<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. Проверка работоспособности выдает HTTP-запрос без X-Forwarded-Proto установлен заголовок, поэтому Apache ответит 301 и, следовательно, проверка работоспособности не выполняется (она не следует перенаправлениям). К сожалению, невозможно определить заголовки в Google Health Checker, поэтому я не могу подделать X-Forwarded-Proto заголовок на «https». Поэтому я надеюсь, что обходной путь будет заключаться в том, чтобы указать параметр запроса в пути проверки работоспособности и настроить .htaccess файл ТОЛЬКО для перенаправления, если указанный параметр запроса не определен (или равен false или что-то подобное).

Вопрос

Как я могу изменить RewriteCond (Я полагаю) выполнять перенаправление только в том случае, если X-Forwarded-Proto заголовок не равен https (как в примере выше) И строка запроса не содержит параметра healthCheck=true?

Можешь попробовать с этим?

<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 .