Hey guys,
thanks for the caddy server, i find it really easy proxying docker apps. I tried getting wondercms to work this time without docker and have problems with the caddyfile.
1. Caddy version (caddy version
):
2.4.6
2. How I run Caddy:
Debian apt with caddy stable repo
a. System environment:
Debian 5.10.84 VPS
PHP 7.4
b. Command:
Paste command here.
c. Service/unit/compose file:
Paste full file contents here.
Make sure backticks stay on their own lines,
and the post looks nice in the preview pane.
d. My complete Caddyfile or JSON config:
web.tllggrs.de {
import logd
root * /var/www/wondercms
encode gzip zstd
file_server
respond /cache.json 403
respond /database.js 403
try_files {path} {path}/ /index.php?page={http.request.orig_uri.path.file}&{query}
php_fastcgi unix//var/run/php/php7.4-fpm.sock
}
3. The problem I’m having:
Especially the original .htaccess file:
Options -Indexes
ServerSignature Off
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA,L]
RewriteRule database.js - [F]
RewriteRule cache.json - [F]
From the caddy docs first i tried:
try_files {path} {path}/ /index.php?page={path}&{query}
Which should handle all of the rewrite lines but the last two. But it seems that wondercms expects the {path} without the leading slash, which you can see in their nginx file:
rewrite {
r ^/(.+)$
to {path} {path}/ /index.php?page={1}
}
so e.g.
/index.php?page=home
not
/index.php?page=/home
which is caddys behaviour for {path}.
So i tried {http.request.orig_uri.path.file} instead, which seems to work at first because wondercms now finds all the pages and doesn’t throw 404 like before.
But now wondercms has problems when setting GET vars. When logging out of admin, it redirects to
index.php/logout&token=sometoken
which ends in an error and not logging out because there should be a question mark instead of the ampersand in the url. Changing it by hand to a question mark in the URL bar makes the logout succeed.
Is this a problem with wondercms thinking the URL already has some GET vars because of the internal rewrite with ?page= and not remembering the actual URL doesnt already have GET vars? Or did i not find the right placeholder for try_files statement causing an error in wondercms php? The placeholder should be equivalent of {path} without leading slash.
Also the caddy file seems to prioritize the try_files statement when requesting cache.json or database.js, instead of responding with 304. Which also prevents access, since it redirects to index.php but is not the wanted behaviour for me.
4. Error messages and/or full log output:
5. What I already tried:
I tried different placeholders, but i can’t find the right one. Also i found an older thread with wondercms but couldn’t get it to work.
6. Links to relevant resources:
Thanks!