Well, first off, the http->https redirect is done for you automatically; you can leave the scheme off your site address in the Caddyfile.
Your rewrite is trying the URI first, then the URI with a trailing slash, then finally index.php if the file does not exist as one of the first two forms. So I don’t know exactly, but I’d play around with the rewrite a bit.
I should apologize for the wasted time: I found out a day later that Caddy doesn’t check the Caddyfile on every request, but instead loads it when Caddy starts. I thought it was like a .htaccess file so I was just making adjustments and reloading the page without restarting the Caddy service.