Redirect to index.php on multisite setup

Hey…
i’m using multisite setup.
There are several redirects, for example in .htaccess to index.php… but on multisite setup, direct opening of index.php results in a 404.
i think this is because of some routing. maybe kirby thinks “index.php” is a folder inside content folder?

The redirect to index.php means that your are sent to the router. The index.php is usually not directly accessible.

what i wanted to say:
kirby links/redirects several times to index.php and this results in 404…
maybe this is solved, when it links to / instead of index.php

Any steps to reproduce this?

Please also provide information about your server setup, PHP and Kirby version.

i use this theme https://www.thezero.club/demo/one/
since this theme is not free, i can’t provide it to you.

  • php 7.2.29 (dedicated docker image)
  • kirby v3.4.4
  • Plugins (i gues the most are not related… i just post them to be precise):
    • autoresize
    • bouncer
    • cachebuster
    • commentions
    • datamints_ldap
    • editor
    • editor-gallery-block
    • editor-info-block
    • editor-intro-block
    • editor-table-block
    • k3-image-clip
    • kirby3-autoid
    • kirby3-feed
    • kirby3-robots-txt
    • kirby3-video
    • kirby-builder
    • kirby-colors
    • kirby-sanitizer
    • lessphp
    • locator
    • retour-for-kirby
    • securedpages
    • similar
    • sitemapper

modified:
.htaccess

# Apache block users from browsing folders without a default document
<IfModule mod_autoindex.c>
  Options -Indexes
</IfModule>

# Kirby .htaccess
# revision 2020-06-15

# rewrite rules
<IfModule mod_rewrite.c>

# enable awesome urls. i.e.:
# http://yourdomain.com/about-us/team
RewriteEngine on

# make sure to set the RewriteBase correctly
# if you are running the site in a subfolder;
# otherwise links or the entire site will break.
#
# If your homepage is http://yourdomain.com/mysite,
# set the RewriteBase to:
#
# RewriteBase /mysite

# In some environments it's necessary to
# set the RewriteBase to:
#
# RewriteBase /

# Cachebuster plugin
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.(\d+)\.(js|css)$ $1.$3 [L]

# block files and folders beginning with a dot, such as .git
# except for the .well-known folder, which is used for Let's Encrypt and security.txt
RewriteRule (^|/)\.(?!well-known\/) index.php [L]

# block all files in the content folder from being accessed directly
RewriteRule ^content/(.*) index.php [L]

# block all files in the site folder from being accessed directly
RewriteRule ^site/(.*) index.php [L]

# block direct access to Kirby and the Panel sources
RewriteRule ^kirby/(.*) index.php [L]

# make site links work
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php [L]

</IfModule>

# pass the Authorization header to PHP
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

# compress text file responses
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>


RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

index.php

<?php

require 'kirby/bootstrap.php';

$sites = [
  'www.example1.de' => 'example1',
  'www.example2.de' => 'example2',
];

$host = Url::host();
$root = $sites[$host];
$url  = 'https://' . $host;

$kirby = new Kirby([
    'roots' => [
        'index'         => __DIR__,
        'blueprints'    => __DIR__ . '/site/theme/blueprints',
        'collections'   => __DIR__ . '/site/theme/collections',
        'controllers'   => __DIR__ . '/site/theme/controllers',
        'models'        => __DIR__ . '/site/theme/models',
        'snippets'      => __DIR__ . '/site/theme/snippets',
        'templates'     => __DIR__ . '/site/theme/templates',
        'site'          => __DIR__ . '/site',
        'content'       => $root . '/content',
        'media'         => $root . '/media',
        'assets'        => $root . '/assets',
        'config'        => $root . '/config'
    ],
    'urls' => [
      'media'  => $url . '/' . $root . '/media',
      'assets' => $url . '/' . $root . '/assets',
    ],
]);

echo $kirby->render();

For one thing, your last rewrite rules are outside of the <mod_rewrite> block, secondly, I think order is important and these rules should probably be at the top after RewriteEngine on.

thx… i changed it… but this does not fix the original problem.

for example https://example1.de/wp-login.php redirects to https://www.example1.de/index.php an results in a 404
(taken from log)

i think it’s about the rewrite rule for www. maybe this one needs a change? I’m sorry… i don’t know if this rule is the best solution for people entering example1.de.

If this only happens when redirecting from non-www to www, then it’s probably an issue with your rule.

Do you have any other redirects set up, maybe in retour? Because normally, wp-login should end up in an error without a prior redirect.

Retour is installed, but not in use, because auf this: https://github.com/distantnative/retour-for-kirby/issues/213

i’m confused… the problem of redirection to /index.php existed several days… in several browsers (also private tabs/incognito mode, etc.)… maybe it was a strange caching problem… but i’m not able to reproduce the problem right now.

seems to be solved… but I’m not sure right now…