Yes, HTML and PHP are two separate languages. What works for HTML will not always work for PHP and vice versa. With that include line, PHP is literally looking for the filesystem folder "/includes_html" which doesn't exist. So for PHP includes, you should use:
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/includes_html/head.php');
For HTML, if you know the direct path from the document root, you can just say:
<link rel="stylesheet" type="text/css" href="/css/site.css" />
For example in my index.php which is in root directory it will look like this:
<link rel="stylesheet" type="text/css" href="css/main.css" />
and in subfolder files it will look like this:
<link rel="stylesheet" type="text/css" href="../css/main.css" />
No, the <link> tags will look the same because HTML defines paths relative to the root of the website IF the href or src attribute starts with a "/" (i.e. if you don't specify a domain, it uses the one you're currently at to look for that resource).
For example, if in the root of your site you have:
<link rel="stylesheet" type="text/css" href="/styles/site.css" />
<script language="javascript" type="text/javascript" src="scripts/jQuery.js"></script>
HTML will look relative to the domain root for the stylesheet, and relative to the current document's path for the script. So if you have a subfolder (say "about") and in that index page you have the same exact code, the CSS would be included (since HTML will use the domain root as the base) but the jQuery include would fail because there is no subdirectory "scripts" in the about folder (which is where the current file resides).
With PHP, everything is relative to the current script being executed. Meaning that if you include a file and use a relative path to include another file, you're in for some snags as the paths will get murky. This is why it's good in PHP to designate a root variable to refer to or use a more absolute relative path. A more absolute relative path would be something like:
<?php
$thisFile = dirname(dirname(__FILE__));
Then when you do an include you can do:
<?php
$thisFile = dirname(dirname(__FILE__));
include($thisFile.'/some_other_dir/other-file.php');
So it's still "relative" but it's more absolute. It's relative to the current document, but gives you an absolute designation as to where it is relative to that document. Much better than "../../../../../../" stuff. Of course you could always say:
<?php
define('ROOT', realpath(dirname(__FILE__)));
in some file in the web-root that is included with every other file and voila!!
And there is also the last option which is to put all your includes into one folder, and add that folder to the path so you can just do includes by name, rather than defining paths 😉