Apache mod_rewrite RewriteRule некорректно добавляет в порт AWS - PullRequest
2 голосов
/ 25 июля 2011

У меня проблема с запуском двух систем в одном экземпляре EC2 и использованием AWS Elastic Load Balancer для отправки запроса одной системы на порт 81.

Так, например, у нас есть www.example.com и bookings.example.com, где AWS Elastic Load Balancer отправляет запросы на бронирование. хотя к нашим коробкам EC2 на порт 80 и запрос на www. получать через порт 81.

Клиент подключается к www.example.com через порт 80, но затем получает доступ от балансировщика нагрузки к серверу через порт 81.

Когда мы добавляем это правило, например, в .htaccess для сайта www, у нас возникают проблемы с появлением порта 81.

RewriteRule ^index.html / [R=301,L,QSA] !-s
#Results in customer being sent to http://www.example.com:81/

Как я могу убедиться, что порт 81 не возвращен клиенту?

Я придумал эту альтернативу:

RewriteRule ^index.html http://%{HTTP_HOST}/ [R=301,L,QSA] !-s

Но в этом примере http жестко запрограммирован, и мне нужно сделать эту переменную, чтобы она могла быть https при необходимости. У меня также есть не только это правило index.html, которое перенаправляет обратно в / у меня около 30 правил, и я считаю, что должен быть один вкладыш, чтобы исправить этот проходной порт 81 обратно к клиенту.

1 Ответ

1 голос
/ 25 июля 2011

Ваша альтернатива будет работать и может быть расширена для поддержки ssl, но, вероятно, в этом нет необходимости. Apache следует определенному порядку при создании ссылок на собственные ссылки. UseCanonicalName и UseCanonicalPhysicalPort управляют их созданием независимо от модуля (mod_rewrite, mod_alias и т. Д.).

Не зная больше вашей конфигурации, я бы предложил начать с этих директив в соответствующем VirtualHost.

UseCanonicalName On
ServerName www.example.com:80

РЕДАКТИРОВАТЬ : Если вы не хотите делать это по какой-либо причине, вот как вы исправляете переписывание для поддержки ssl.

RewriteCond %{HTTPS} =on
RewriteRule - - [env=req_scheme=http,S=1]
RewriteRule - - [env=req_scheme=https]

RewriteRule ^index.html %{ENV:req_scheme}://%{HTTP_HOST}/ [R=301,L,QSA]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...