два RewriteRule работают отдельно, а не вместе - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть 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]
...