.htaccess Wordpress example
For future reference it would be nice to include an example for the .htaccess files for wordpress multisites. As wordpress is a super easy, yet powerfull tool just like caddy.
I mean, I freaking love caddy, how it magically just works is simply amazing! And I hate it, that something to mundane like .htaccess is for a server/web noob like me with caddy such a great impediment :’(
Wordpress .htaccess files
Thank you guys for your time and interest in helping me!
1. Caddy version (caddy version
):
v2.2.1 h1:Q62GWHMtztnvyRU+KPOpw6fNfeCD3SkwH7SfT1Tgt2c=
2. How I run Caddy:
a. System environment:
OS: Debian 10, no container
php 7.4
updated wordpress multisite subdirectory.
Caddy as my webserver
b. Command:
curl -v https://datoo.wissensbisse.com/demo/wp-admin
c. My complete Caddyfile or JSON config:
datoo.wissensbisse.com {
root * /var/www/datoo.cloud/wordpress
php_fastcgi unix//run/php/php7.4-fpm.sock
file_server
}
3. The problem I’m having:
Redirect loop, trying to access Log In ‹ — WordPress
Checking browser Network tool, one can find the 302 redirects and a lot of 404 errors.
Also, styles and js files are not being found.
Need to translate the standard .htaccess file to caddy rules, but am not able to do so myself.
Examples I found here in the forum seem to be for Caddy v1 or solving a different problem.
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
curl -v https://datoo.wissensbisse.com/demo/wp-admin
* Expire in 0 ms for 6 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 1 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 2 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Expire in 0 ms for 1 (transfer 0x56044290e9c0)
* Trying 46.38.237.15...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x56044290e9c0)
* Connected to datoo.wissensbisse.com (46.38.237.15) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN, server accepted to use h2
* Server certificate:
* subject: CN=datoo.wissensbisse.com
* start date: Jun 7 16:25:21 2021 GMT
* expire date: Sep 5 16:25:21 2021 GMT
* subjectAltName: host "datoo.wissensbisse.com" matched cert's "datoo.wissensbisse.com"
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x56044290e9c0)
> GET /demo/wp-admin HTTP/2
> Host: datoo.wissensbisse.com
> User-Agent: curl/7.64.0
> Accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Connection state changed (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 302
< cache-control: no-cache, must-revalidate, max-age=0
< content-type: text/html; charset=UTF-8
< expires: Wed, 11 Jan 1984 05:00:00 GMT
< link: <https://datoo.wissensbisse.com/demo/wp-json/>; rel="https://api.w.org/"
< location: https://datoo.wissensbisse.com/demo/wp-admin/
< server: Caddy
< status: 302 Found
< x-redirect-by: WordPress
< content-length: 0
< date: Sat, 26 Jun 2021 20:57:24 GMT
<
* Connection #0 to host datoo.wissensbisse.com left intact
5. What I already tried:
Checked my wordpress database for correct URLs, aswell as the wp-config.php
Checked this forum aswell but could not find a solution for a standard wordpress multisite installation with subdirectories.
Tried to find a tool to convert the .htaccess file to caddyfile but failed to do so (or convert it myself.)