2016-06-08 5 views
0

У меня есть оба следующие одновременные требования:Перепишите Non-WWW для WWW и HTTP к HTTPS

  • НТТР HTTPS
  • не-WWW на WWW

Чтобы иметь дело с первым требованием , у меня есть следующий Apache конфигурационный раздел:

ServerName www.example.com 
RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule !/elbcheck.html https://%{SERVER_NAME}%{REQUEST_URI} [L,R] 

условие X-Forwarded-Proto работает с моим AWS, а RewriteRule предназначен для избежания повторной записи при работе с файлом elbcheck.html, поскольку он является целью проверки работоспособности системы распределения нагрузки AWS. Это проверено и работает (source).

Но у меня с трудом удается получить не-www для перехода на www. Я подошел близко к одной точке, но столкнулся с серьезной проблемой с https://example.com переписыванием на https://www.example.com

Как мне заставить вещи работать с моим HTTP-адресом до https повторно записывать, а также исправлять мои не-www для повторной записи в WWW ?

+0

Измените проверку ELB на TCP-протокол на порт 80 при проверке работоспособности. И затем примените эти правила. – error2007s

ответ

1

Решение этой проблемы является многоэтапным. Во-первых, я нашел очень полезный ответ на более ServerFault:

https://serverfault.com/a/728957/336268

Используя это, я переписал мой Apache конфигурации следующим образом. Обратите внимание, что он по-прежнему сохраняет мое требование об отказе от elbcheck.html.

RewriteEngine On 

# Ensure www. 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule !/elbcheck.html https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# Ensure https 
RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteCond %{HTTPS} off 
RewriteRule !/elbcheck.html https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Сразу после того, как сделать это, и повторный запуск Apache, я заметил, редирект, начиная работать с проблемной https://example.com

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

http://www.jasonsamuel.com/2011/03/07/how-to-properly-use-ssl-redirects-without-getting-certificate-error-messages/

В статье в основном говорит о том, что проблематично редирект https://example.com не может быть решена только configration и требует взаимной поддержки на уровне сертификата. Мой подстановочный сертификат не охватывал дело «apex domain» и, таким образом, приводил к тому, что браузер жаловался на действительность сертификата с учетом конкретного случая.

К счастью, для меня, так как я использую веб-службы Amazon, исправление проблемы с сертификатом было быстрым. Я только что запросил новый сертификат от ACM, который включал как вершину, так и подстановочный знак. Я установил сертификат на мой балансировщик нагрузки AWS, и теперь моя проблема решена.

+0

Я также хочу прокомментировать, что большая часть моей проблемы в первую очередь не была в состоянии прочитать и понять Apache mod_rewrite. Это невероятно сложно, особенно когда вам также нужно прочитать и понять синтаксис регулярных выражений. Я нашел следующее, чтобы быть полезным для того, чтобы получить достаточное знание, чтобы помочь мне настроить мою конфигурацию: https://httpd.apache.org/docs/current/rewrite/intro.html – robbpriestley

0

Вы можете использовать

RewriteEngine On 
    RewriteCond %{HTTP:X-Forwarded-Proto} !https 
    RewriteCond %{HTTP_HOST} !^www\..+$ [NC] 
    RewriteRule ^/elbcheck\.html$ - [L] 
    RewriteRule^https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+0

Мне нравится, когда вы собираетесь с этим, но при перезапуске Apache я получаю синтаксическую ошибку в последней строке 'RewriteRule: неверные флаги-разделители apache config test терпят неудачу, прерывая' – robbpriestley

+0

Извините, я пропустил одну строку. Я обновил свой ответ. Он разрешит ваш запрос. – karan

+0

Синтаксис OK, но теперь 'http: // www.example.com' переписывает' http: // www.www.example.com'. Плохо. Тем не менее, спасибо за помощь! – robbpriestley

Смежные вопросы