# /etc/caddy/Caddyfile — copy this file there, then: sudo systemctl reload caddy # # Caddy fetches and renews Let's Encrypt certificates automatically the first # time a domain's DNS points at this server. git.* and ci.* work immediately; # the vienalatina.com block stays commented until cutover day (Sunday evening), # because Caddy can only get its certificate once the A record points here. git.vienalatina.com { reverse_proxy 127.0.0.1:3000 } ci.vienalatina.com { reverse_proxy 127.0.0.1:8000 } # --------------------------------------------------------------------------- # UNCOMMENT EVERYTHING BELOW ON CUTOVER DAY (after flipping the A record) # --------------------------------------------------------------------------- # www.vienalatina.com { # redir https://vienalatina.com{uri} 301 # } # # vienalatina.com { # root * /var/www/vienalatina.com # encode zstd gzip # file_server # # # llms.txt is markdown (matches the old WP behaviour) # header /llms.txt Content-Type "text/markdown; charset=utf-8" # # # --- 301s for old WordPress URL patterns ----------------------------- # # # /?p=123 style permalinks → home (add specific mappings as GSC reports them) # @wp_query_permalink { # path / # query p=* # } # redir @wp_query_permalink / 301 # # # WP category base was /categoria/… (Spanish slugs); Hugo uses /categories/… # @old_category path_regexp oldcat ^/categoria/(.*)$ # redir @old_category /categories/{re.oldcat.1} 301 # # # WP author archives have no Hugo equivalent → home # @old_author path /autor/* # redir @old_author / 301 # # # Old WP media library URLs → migrated uploads folder # @old_uploads path_regexp oldup ^/wp-content/uploads/(?:\d{4}/\d{2}/)?(.*)$ # redir @old_uploads /uploads/{re.oldup.1} 301 # # # Anything else that starts with /wp- doesn't exist anymore # @wp_leftovers path /wp-admin/* /wp-login.php /wp-json/* /xmlrpc.php # redir @wp_leftovers / 301 # # # Custom 404 falls back to Hugo's 404 page # handle_errors { # @404 expression {err.status_code} == 404 # rewrite @404 /404.html # file_server # } # }