I have created an SSL certificate using Let's Encrypt.
The certificate has been installed and is referenced in the Apache config file.
The Apache config provides a ServerName (e.g., example.com) and a ServerAlias (e.g., www.example.com). Both are referenced in the SSL certificate as verified by the output from the certbot certificates command.

The Apache config also contains a redirect from HTTP to HTTPS.
RedirectMatch permanent ^/(.*) https://example.com/$1

The problem is that the redirect is only happening for the alias (www.example.com). Requests to example.com result in a simple 200 OK response.

Request to alias:

$ curl -I www.example.com
HTTP/1.1 301 Moved Permanently
Date: Sun, 01 Mar 2020 19:13:57 GMT
Server: Apache/2.4.29 (Ubuntu)
Location: https://example.com/
Content-Length: 325
Content-Type: text/html; charset=iso-8859-1

Request to the actual ServerName value:

curl -I example.com
HTTP/1.1 200 OK
Date: Sun, 01 Mar 2020 19:16:43 GMT
Server: Apache/2.4.29 (Ubuntu)
Last-Modified: Sun, 23 Feb 2020 00:03:31 GMT
ETag: "2aa6-59f32fc296ba5"
Accept-Ranges: bytes
Content-Length: 10918
Vary: Accept-Encoding
Content-Type: text/html

The <VirtualHost *:80> and <VirtualHost *:443> sections of the config file are identical except for the redirect in the *:80 section and the SSL lines in the *:443 section:

SSLCertificateFile /etc/letsencrypt/live/example/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

Am I missing something obvious or have I just gone far awry? :-) Thanks


Figured it out! :-) Posting the answer here in case some other poor soul makes the same mistake that I did.

Turns out that there was a <VirtualHost *:80> entry in 000-default.conf with the same server name (ServerName example.com). The 000-default.conf file does not include the SSL configuration directives.

It appears that if the same ServerName shows up in more than one enabled Apache config file, which entry takes precedence is indeterminate.

I simply changed the ServerName directive in 000-default.conf to include a host name and restarted Apache. Problem solved.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.