The problem is in the way PHP include() works; it literally includes the code from head.php into index.php, without updating any relative links. As such, you index.php is looking for the CSS file in ../css/index.css. And while your head.php does indeed need to go up one directory before looking in the CSS folder, your index.php file does not.
To resolve this, you have a number of options:
- You can update the relative path to
css/index.css to work from your index.php file.
- You can use the root-relative path
/css/index.css to reference the CSS file from any folder.
- You can use the absolute path
https://yourwebsite.com/css/index.css to reference the CSS file from not only your website, but any other website. This further eliminates confusion, but will cause issues if you change the domain.
Personally I would recommend the root-relative path, as it makes things less confusing when using things like includes and partials.
hrefis relative to the current browser url path, while the php'sincludeis relative to the server path.