У меня есть Apache 2.4.37 на новой CentOS 8.1.1911, на которой установлен Zabbix 4.4 и другие. Используя модуль mod_rewrite
и его директивы RewriteCond
и RewriteRule
в .htaccess
, я пытаюсь добиться этого:
- При доступе к
/
пользователь будет перенаправлен на /zabix
сохранение подкаталога используется протокол (HTTP или HTTPS). - При доступе к любому URI, начинающемуся с
/zabbix/
с использованием HTTP, пользователь будет перенаправлен на HTTPS с сохранением исходного URI.
Мне удалось создать две отдельные рабочие наборы правил, но я не могу заставить их работать вместе.
Перенаправление с /
на /zabbix
с сохранением используемого протокола:
RewriteEngine on
RewriteCond %{HTTPS}s ^(on(s)|offs)$ [NC]
RewriteRule ^ - [E=REQUEST_SCHEME:http%2]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^ %{ENV:REQUEST_SCHEME}://%{HTTP_HOST}/zabbix [R]
Перенаправление на HTTPS для /zabbix/*
URI:
RewriteEngine on
RewriteCond %{HTTPS} ^off$ [NC]
RewriteCond %{REQUEST_URI} ^/zabbix/
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R]
Я знаю, что могу перенаправить на HTTPS непосредственно в первом наборе правил, так как пользователь будет перенаправлен на HTTPS вторым набором правил, так или иначе, но я хочу это так (я могу изменить этот набор правил, чтобы он указывал на другой подкаталог / приложение в в любое время).
Для второго набора правил есть какая-либо разница, какое-либо преимущество или недостаток в любом из следующих двух способов? Требует ли какой-либо из этих способов флаг [QSA]?
1 RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R]
2 RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R]