Я перенес свой DNS на Route 53 и в настоящее время использую запись псевдонима, чтобы указать мои www.domain.com и domain.com на мой Elastic Load Balancer.
Оба работают отлично, но моя проблема в том, что я пытаюсь использовать файл htaccess для перенаправления не-www на www. Он просто не выполняет поиск DNS и выдает ошибки, когда я захожу на domain.com и перенаправляюсь на www.domain.com, переход прямо на www.domain.com все еще работает.
Прежде чем я сделал все с балансировщиком нагрузки и когда я просто тестировал экземпляр, я бы использовал общедоступный DNS для своего домена, например, ec2-99-99-999-99.compute-1.amazonaws.com и когда Я вставляю файл htaccess, он перескакивает на www.ec2-99-99-999-99.compute-1.amazonaws.com и выдает ошибку.
Любая помощь будет очень признательна, так как я рву волосы из-за этого.
Не видя вашего файла .htaccess, не совсем понятно, что происходит, но что-то вроде этого должно работать, если у вас включен mod_rewrite:
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^/?(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Редактировать:
Если вы видите ошибку 502 от ELB, вероятно, это связано с тем, что ваше приложение не возвращает полный заголовок ответа, а просто возвращает код ответа HTTP. Об этом говорили на форумах разработчиков EC2: https://forums.aws.amazon.com/message.jspa?messageID=345128
Вы можете решить эту проблему, отслеживая сетевой трафик на сервере, чтобы определить, какие заголовки и коды ответов отправляются обратно в ELB. Вероятно, вам следует сделать это, когда он терпит неудачу (на мобильном телефоне) и преуспевает (на вашем ПК).
Предполагая, что на вашем сервере работает Linux, нгреп хороший простой инструмент для этого:
# Just show HTTP traffic
ngrep -q '' port 80
# Just show GET and POST requests
ngrep -t '^(GET|POST) 'port 80'
В противном случае вы можете использовать Wireshark, который отлично работает под Windows.