I am wondering how Kirby determines the domain name the site is running on. I have one site where the
config.php always gets used despite a specific config for the domain existing.
The only thing different with this particular site is that there is a
.htaccess rule that forces the www at the start of the URL. Could this be interfering?
The config file name is in the form of
config.domainname.com.php. Do I really need to put the www in the file name?
Yes, of course. The www.example.com domain is a different domain from dev.example.com or just example.com.
I see. I think the docs could be a little clearer to point that out Currently the help page on this assumes there are no www in the domain.
Hm, the examples don’t have a
www subdomain, but
/site/config/config.staging.yourdomain.com.php. Were you assuming that www is another sort of subdomain than
staging? But I can of course add it as another example.
I figured that Kirby would know that
example.com is the same site but
dev.example.com is a different place.
Well, while it is pretty unlikely that
http://example.com are used for different purposes, from a technical point of view that would be possible. So it would be rather un-Kirby-ish to assume both are the same.
I ran into a similar issue with a custom
site.php and a multiple domain setup lately.
server::get() when loading the config and inside this method the result is sanitized and this removes the leading
www from the
@flokosiol If that was the case, the domain specific config file would be loaded instead of the subdomain specific www file? I can’t see where this would remove the www from the SERVER_NAME?
$servername = 'www.example.com';
$value = preg_replace('![^\w.:-]+!iu', '', $servername);
// result: www.example.com
$configs = array(
'main' => 'config.php',
'host' => 'config.' . server::get('SERVER_NAME') . '.php',
'addr' => 'config.' . server::get('SERVER_ADDR') . '.php',
on my domain www.example.com results in
[main] => config.php
[host] => config.www.example.com.php
[addr] => config.::1.php
Strange … I double checked this on a live site and the
www gets removed when I
$configs … but locally it’s like you said!? Everything as expected …
@flokosiol I just tested this on a remote domain, just to make sure, with the same result as above.
And, as I wrote above, the
preg_replace() function doesn’t remove the
www bit, all it does is remove all characters that are not a word character (alphanumerical characters plus underscore including unicode characters), not a colon, not a dot, and not a dash. Since
www doesn’t fall into any of these categories, it is not removed, as you can see from the example I posted above.
I don’t know what is happening on your site, but there’s nothing in the code to confirm your theory, I’m afraid?
I follow @texnixe, she is correct here as always !
But your problem is, I think, outside of Kirby:
Put the following code temporarily (security !!!) in a template or snippet and call a page using that code:
<?php phpinfo(); ?>
In that page search for “
SERVER_NAME” in the first column of a table.
And view that page by changing between your websites "
www.example.com" and “
Does the content in the second column change?
I guess no. Then this is your problem, which you may want to resolve. Look at your webservers configuration…
I don’t think there is any problem.
If you use the
www.example.com domain, name your domain specific config
If you use the
example.com domain, name your domain specific config
If you reroute from non-www to www, you use the www domain, not the non-www domain.
@anon77445132 you won’t even see the phpinfo for the non-www domain because the rerouting takes place before PHP kicks in (unless you remove the redirect from the .htaccess but that changes everything, anyway).
Sorry to dig this one up again, but i’ve run into it again, on a different server. It only loads
config.php, not the domain specific config.
If i put this in a comment tag in my site head:
<?php echo server::get(); ?>
The result is:
<!-- Array -->
Gives me nothing. How can it be that Kirby can’t figure out what the domain is, in order to load the config? Is there something else I can try to figure out whats going on?
Edit: Ah. It’s an array. Should have done…
<!-- <?php var_dump(server::get()); ?> -->
The info it gives me tells me the config is named correctly. The domain name has a hyphen in the middle of it. Would that be a problem?
Please ignore this. It suddenly started working, although i did nothing at all to correct it. Not sure what was going on there.