Force https: // e www. com o host virtual apache2

5

Eu estive procurando por toda parte uma solução para forçar https: // www na frente de todos os meus URLs usando o host virtual. Isto é o que eu tenho atualmente no meu arquivo 000-default.conf:

<VirtualHost *:80>
ServerName www.domain.com
Redirect / https://www.domain.com/
</VirtualHost >

Isso significa tudo www. iria redirecionar para https: // www.

Agora estou sem o código para redirecionar todas / quaisquer outras formas de URL para o link . usando o mesmo conceito (não RewriteEngine porque o Apache sugere não usar RewriteEngine em redirecionamentos simples).

Por exemplo:

  • link
  • link
  • link

todos eles iriam para = > link

Se alguém puder me apontar na direção certa, isso seria ótimo!

    
por Edward 29.07.2015 / 00:47

3 respostas

10

Isso funcionou para mim, você pode testá-lo no meu domínio, se quiser.

<VirtualHost *:80>
    ServerName freesoftwareservers.com
    ServerAlias *.freesoftwareservers.com
    Redirect / https://www.freesoftwareservers.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName freesoftwareservers.com
    ServerAlias *.freesoftwareservers.com

link

link

link

Eu tive problemas para reimplantar isso e descobri que, se eu excluísse o symlink 000-default.conf do / sites-enabled, funcionava. Não tenho certeza do que é o negócio, mas eu tenho 0 outros registros DNS no lado do DNS e meu Apache faz todo o redirecionamento e funciona.

    
por FreeSoftwareServers 29.07.2015 / 00:57
3

Você precisa de três redirecionamentos para fazer o que quiser:

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

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

https://example.com a https://www.example.com

Os dois primeiros são da porta 80 HTTP simples, então você tem um VirtualHost para eles. Você pode aplicar uma seção VirtualHost a mais de um nome de host (www.example.com e example.com) por meio de uma seção ServerAlias:

# Redirect http://example.com and http://www.example.com to main site
<VirtualHost *:80>
  ServerName www.example.com
  ServerAlias example.com

  Redirect / https://www.example.com/
</VirtualHost >

Em seguida, você precisa de um VirtualHost para o seu link apenas. HTTPS usa a porta 443:

# Redirect https://example.com to main site
<VirtualHost *:443>
  ServerName example.com

  Redirect / https://www.example.com/
</VirtualHost >

Observação: você também precisará definir suas configurações de SSL, com um certificado que suporte AMBOS o domínio com e sem o "www.". A configuração das configurações de SSL está fora do escopo desta questão. ( Informações adicionadas: podem ser dois certificados separados, se você quiser; está se tornando mais comum ter muitos certificados separados, agora temos coisas como Let's Encrypt e SNI )

Se você não tiver um certificado SSL que suporte seu domínio sem o "www." então você não poderá fazer o redirecionamento de https://example.com . O redirecionamento só acontecerá depois que o navegador verificar o certificado. O usuário seria apresentado a um erro de certificado incompatível.

Então, finalmente, você precisa da sua seção VirtualHost para o site "válido": HTTPS (porta 443) em www.example.com:

# Main site
<VirtualHost *:443>
  ServerName www.example.com

  # Put all your configuration for this site here

</VirtualHost >

Depois de ter testado seus redirecionamentos e você está feliz por eles estarem funcionando, você pode torná-los permanentes especificando o status 301 no redirecionamento (alterando Redirect / https://www.example.com/ para Redirect 301 / https://www.example.com/ em todos os lugares) e habilitando HSTS que força os navegadores dos usuários a lembrar a preferência por HTTPS.

    
por thomasrutter 29.07.2015 / 02:54
1

Para adicionar a resposta de thomasrutter, ainda tive um problema quando estava fazendo o que ele sugeriu. Às vezes, você pode precisar adicionar as informações de SSL ao host virtual link . Por exemplo, quando você está usando o SNI para permitir vários certificados ssl por ipaddress.

Sem ele você pode obter o erro ssl_error_rx_record_too_long, já que o servidor retornará o texto simples para a requisição https.

# Redirect https://example.com to main site
<VirtualHost *:443>
  ServerName example.com
  Redirect / https://www.example.com/

  #for Apache Old Style (Valid on Apache <= 2.4.8) - just add in whats needed for your version
  SSLEngine on
  SSLCertificateFile        "your certificate file.crt"
  SSLCertificateKeyFile     "your key file.key"
  SSLCertificateChainFile   "your chain file.crt"
</VirtualHost >
    
por funferret.com 03.04.2017 / 17:02