Nuevo método de GoDaddy para verificar que un dominio es nuestro usando HTML

No se como sucedió, pero el método para validar que un dominio es nuestro para GoDaddy cambió. Inicialmente nos habían dejado sin ningún método HTML, así que estamos mejor. Así y todo me llevó un buen rato hacer funcionar el nuevo método en apache. El problema es que debemos guardar el arhivo de validación en un directorio que empieza con un punto (es oculto): /.well-known/pki-validation/godaddy.html

Tags: 

Las dificultadas para hacer que esto funcionara con apache y en mi configuración fueron:

  • Yo no sabía que los directorios ocultos (.) estaban bloqueados en Apache. Esta es la configuración por defecto, se puede cambiar pero no es seguro.
  • En mi caso tengo dominios que solo trabajan en HTTPS (el dominio HTTP está redirigido a HTTPS). Esto hizo que mis reglas tengan que coexistir con las de la redirección HTTPS.
  • Tengo sitios corriendo un apache que yo controlo (pudiendo usar configuraciones en el Virtual Host) y otros que corren en Acquia (y lo único que puedo usar es el .htaccess).

La verdad que las reglas resultantes no son muy complicadas, pero llevó bastantes pruebas llegar a ellas. Finalmente logré reglas que funcionaran tanto para VirtualHost como para .htaccess (no son iguales).

Por supuesto que podríamos haber hecho una verificación usando DNS, pero en muchos casos eso significa involucrar al dueño del dominio y termina llevando mas tiempo. A veces incluso se puede complicar ya que el dueño no entiende de DNS.

Configuración para Virtual Host (sitios donde controlamos la configuración de apache):


RewriteEngine  on
RewriteRule    "^/\.well-known/pki-validation/godaddy\.html/" "/godaddycode.txt" [PT]
RewriteRule    "^/\.well-known/pki-validation/godaddy\.html$" "/godaddycode.txt" [PT]
    

Si el sitio solo corre sobre HTTPS y tenemos reglas de redirección deberemos agregar las siguientes reglas:


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]
    

Si solo podemos usar reglas en .htaccess (y no tenemos redirecciones HTTPS):


# 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>
    

Usando solo reglas en .htaccess e incluyendo reglas de redirección a 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>
    

Para hacer que esto funcione en Acquia tuve que tomar prestadas algunas reglas de .htaccess que viene con D8

Así que reemplacé las reglas:


# 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]
    

Por estas que vienen con D8:


# 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]
    

Espero que esto ayude a alguien. Se que me llevó bastante tiempo llegar a las reglas correctas y no pude encontrar ningún articulo que me acercara a la respuesta.

Nota: El código que nos da GoDaddy debe ponerse en un archivo llamado godaddycode.txt dentro del directorio docroot de nuestro webserver.