Apache doesn't "have a hard time resolving the relative URLs".
It is the browser that resolves relative URLs based on the folder level of the currently requested HTML page using the following method: take the current page's URL, strip off the page part of that URL, back to the final slash in the URL and then append the relative reference on the end.
The cure, as you have found, is to only use references that begin with a slash when referring to images, and CSS and JS files. That's because URLs are 'used on the web'. They have no meaning inside the server. Inside the server there's only internal file paths.