New HTML validation method from GoDaddy (and how to configure using apache)
I had a couple of speed bumps while doing the setup, so I'm sharing my experience in case anyone else find it useful.
There were a couple of reasons why this was difficult for me:
- I didn't know about the hidden directory (.) block in Apache.
- In my case some domains run the whole site over HTTPS, so I needed to make the new rules co-exist with the old HTTPS redirection rules.
- I have a mixture of hostings. For some sites I control apache, so I could use Virtual Host configurations. But for others (like the ones running on Acquia) I need to create .htaccess rules.
The solution was much simpler than I anticipated, but quite difficult to debug. Finally I made it work for both environments.
I could have used the DNS ownership verification method, but in my case that means I would need to involve the people owning the domain. In my experience that takes longer and it can become really involved when owner doesn't know anything about DNS.
Using Virtual Host config (possible on self hosted sites)
RewriteEngine on
RewriteRule "^/\.well-known/pki-validation/godaddy\.html/" "/godaddycode.txt" [PT]
RewriteRule "^/\.well-known/pki-validation/godaddy\.html$" "/godaddycode.txt" [PT]
If the site is only running on HTTPS and I have a redirection rule I'll work around these URLs. The rules below will work together with the one above:
RewriteCond %{REQUEST_URI} =!/.well-known/pki-validation/godaddy.html
RewriteCond %{REQUEST_URI} =!/.well-known/pki-validation/godaddy.html/
RewriteRule ^(.*)$ https://www.mydomain.com/ [R=permanent,L]
Using only .htaccess rules (and with no HTTPS redirection):
# GoDaddy verification rewrite rules
<IfModule mod_rewrite.c>
RewriteRule "^.well-known/pki-validation/godaddy.html/" "/godaddycode.txt" [PT,L]
RewriteRule "^.well-known/pki-validation/godaddy.html$" "/godaddycode.txt" [PT,L]
</IfModule>
Using .htaccess rules when site is only running over HTTPS:
# GoDaddy with HTTPS redirection rules
<IfModule mod_rewrite.c>
# GoDaddy PassThrough rules
RewriteRule "^.well-known/pki-validation/godaddy.html/" "/godaddycode.txt" [PT,L]
RewriteRule "^.well-known/pki-validation/godaddy.html$" "/godaddycode.txt" [PT,L]
# Set "protossl" to "s" if we were accessed via https://. This is used later
# if you enable "www." stripping or enforcement, in order to ensure that
# you don't bounce between http and https.
RewriteRule ^ - [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ - [E=protossl:s]
# Redirect HTTP to HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteCond %{REQUEST_URI} !=/godaddycode.txt
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
And to make this work on Acquia I had to borrow some rules from D8 .htaccess
So I replaced these sections/rules:
# Protect files and directories from prying eyes (D7)
<FilesMatch "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)(|~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig\.save)$">
Order allow,deny
</FilesMatch>
# Block access to "hidden" directories whose names begin with a period... (D7)
RewriteRule "(^|/)\." - [F]
With these D8 sections/rules:
# Protect files and directories from prying eyes (D8)
<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock))$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
</IfModule>
</FilesMatch>
# Block access to "hidden" directories whose names begin with a period... (D8)
RewriteRule "(^|/)\.(?!well-known)" - [F]
I hope this helps someone else. I know it took me some time to figure it out and couldn't find an specific blog post about it.
Note: Just to be super clear, you should put the code given by GoDaddy into a file called godaddycode.txt on your docroot directory.