Como redirecionar dois domínios, com / sem https, para um site https?

1

Gostaria de fazer o seguinte: usando o Apache, redirecione todos os URLs a seguir:

http://example.com
http://www.example.com
http://beta.example.com
https://example.com
https://www.example.com
https://beta.example.com

para o mesmo local: link . Estou perto, mas não exatamente lá. Aqui está o que eu tenho:

NameVirtualHost xxx.xxx.xxx.xxx:80
NameVirtualHost xxx.xxx.xxx.xxx:443

### rewrite scheme via http://stackoverflow.com/questions/1100343/apache-redirect-from-non-www-to-www                                    
<VirtualHost xxx.xxx.xxx.xxx:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/html/example
    CustomLog /var/log/httpd/example-log combined
    ErrorLog /var/log/httpd/example-log
</VirtualHost>

<Directory /var/www/html/example>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ https://beta.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    Options -Indexes
    Options +FollowSymLinks
    DirectoryIndex index.php
</Directory>

<VirtualHost xxx.xxx.xxx.xxx:80>
    ServerName beta.example.com
    DocumentRoot /var/www/html/example-beta
    CustomLog /var/log/httpd/example-beta-log combined
    ErrorLog /var/log/httpd/example-beta-log

    <IfModule mod_rewrite.c>
              RewriteEngine on
              # redirect all http -> https                                                                                             
              RewriteCond %{HTTPS} off
              RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    </IfModule>
</VirtualHost>

<VirtualHost xxx.xxx.xxx.xxx:443>
    ServerName beta.example.com
    DocumentRoot /var/www/html/example-beta
    ErrorLog /var/log/httpd/example-beta-log
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %{SSL_PROTOCOL}x %{SSL_CIPHER}x" combined_ssl
    CustomLog /var/log/httpd/example-beta-log combined_ssl

    SSLEngine on
    ### SSL details omitted for clarity.
</VirtualHost>

O que eu ganho com isso:

http://example.com => https://beta.example.com
http://www.example.com => Content for www.example.com (/var/www/html/example)
http://beta.example.com => https://beta.example.com
https://example.com => https://example.com (correct content but wrong url)
https://www.example.com => https://www.example.com (correct content but wrong url)
https://beta.example.com => https://beta.example.com

Provavelmente vale a pena notar que meu certificado ssl é totalmente compatível com caracteres curingas, então eu deveria estar bem lá, e todo o material SSL parece estar funcionando (mesmo quando as páginas estão sendo exibidas em link ). Enquanto isso, não há arquivos .htaccess no lugar - estou tentando fazer tudo através da configuração do apache.

Assim, o problema é fazer o link redirecionar corretamente, com e sem o prefixo www. Algum conselho lá fora? Obrigado!

    
por Jim Miller 14.06.2016 / 17:20

1 resposta

1

Pelo que estou lendo, você precisaria de duas entradas separadas do VirtualHost, uma para HTTP e outra para HTTPS. Eles são diferentes pela porta (: 80 para HTTP e: 443 para HTTPS) e também porque você tem a seção SSL On para HTTPS. Cada um precisaria ter todos os nomes listados:

ServerName  beta.example.com
ServerAlias example.com www.example.com

Então, você teria todos os mesmos DocumentRoot e outras informações listadas. Para o HTTP VirtualHost, você já sabe que precisa redirecionar, porque você sabe que quer HTTPS, então você só precisa do RewriteRule:

RewriteRule ^ https://beta.example.com%{REQUEST_URI} [R=301,L]

Para o VirtualHost HTTPS, você precisaria do mesmo RewriteRule, mas também precisaria adicionar uma condição:

RewriteCond %{HTTP_HOST} !^beta\.example\.com$
RewriteRule ^ https://beta.example.com%{REQUEST_URI} [R=301,L]

O RewriteCond está lá para impedir um redirecionamento sem fim.

Isso permitiria controlar os redirecionamentos em um único lugar. Se você não tem um motivo para criar um VirtualHost para cada domínio, é mais simples ter um.

    
por 14.06.2016 / 19:12