Мне нужна помощь в настройке httpd.conf для выполнения перенаправления на тот же сайт при доступе через http и https

Я в значительной степени новичок в настройке http, поэтому, пожалуйста, несите меня (я унаследовал поддержку этой системы).

Мой веб-сервер работает за F5, который обрабатывает все квитирования https . Если входящий запрос предназначен для http, F5 передает запрос веб-серверу через порт 80. Если входящий запрос предназначен для https, F5 обрабатывает все квитирования, а затем передает запрос веб-серверу через порт 81.

Мой файл httpd.conf настроен на прослушивание портов 80 и 81. Для порта 81 определен один виртуальный хост:

<VirtualHost 172.10.112.10:81>
  ServerName example.com
  DocumentRoot /usr/local/mwi/www/winxp/81
  RewriteEngine on
  RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
  RewriteRule .* - [F]
</VirtualHost>

Директивы «RewriteEngine on», «DocumentRoot / usr / local / mwi / www / winxs / 80 ", и все RewriteCond и RewriteRule находятся вне блока виртуального хоста (и не находятся в каком-либо другом блоке), что, как я понимаю, означает, что они являются глобальными директивами.

Моя проблема в том, что правила перезаписи обрабатываются правильно, когда http: //example.com/whatever используется, но перезапись не выполняется, если запрос - https://example.com/whatever . Веб-сайт возвращает ошибку 404 (страница не найдена). Вчера я нашел кое-что (на сайте apache), в котором говорилось, что глобальные директивы игнорируются, если есть блок виртуального хоста, который соответствует входящему запросу.

Я поискал и обнаружил, что могу сделать это с помощью файла htaccess но не рекомендуется из-за снижения производительности (у меня есть доступ к основному файлу httpd.conf).

Нужно ли мне создать дополнительный блок виртуального хоста для порта 80 и переместить в него все директивы Rewrite?

Нужно ли мне также копировать все директивы Rewrite на виртуальный хост для порта 81?

Я бы предпочел сохранить только один набор директив Rewrite для обоих портов. Как мне это лучше всего сделать?

Заранее спасибо.

Harley

0
задан 7 January 2016 в 14:45
2 ответа

Если вы не хотите дублировать конфигурацию перезаписи, вы можете включить ее из внешнего файла:

Включить файлы в HTTP-сервер Apache версии 2.2 httpd.conf

Два отдельные блоки, каждый из которых включает одну перезапись, вероятно, действительно были бы самыми аккуратными.

0
ответ дан 5 December 2019 в 10:59

JayMcTee - спасибо. Я использовал ваш ответ и понял свою проблему. Мне пришлось создать виртуальный хост для запросов порта 80 и удалить глобальные директивы перезаписи.

Насколько я понял документ apache, я подумал, что глобальные директивы перезаписи будут использоваться всегда, независимо от того, на какой порт поступает запрос. При более глубоком чтении документа было сказано, что если запрос обрабатывается виртуальным хостом, то будут использоваться только директивы перезаписи, указанные в этом виртуальном хосте. Первоначально я пытался просто скопировать директивы перезаписи в виртуальный хост порта 81, но проблема все еще оставалась. Затем я создал виртуальный хост для порта 80 и использовал директиву Include на обоих виртуальных хостах.

Проблема решена!

0
ответ дан 5 December 2019 в 10:59

Теги

Похожие вопросы