You should start by understanding the target of a symlink is a pathname. It can be absolute or relative to the directory which contains the symlink.
Assuming you have foo.conf
in /sites-available:
cd sites-enabled
sudo ln -s ../sites-available/foo.conf .
ls -l
Now, you will have a symlink in /sites-enabled called foo.conf
which has a target ../sites-available/foo.conf.
Just to be clear, the normal configuration for Apache is for potential sites to live in /sites-available and the symlinks for the enabled sites to live in /sites-enabled, pointing at targets in sites-available.
That doesn't seem to be the case based on the way you described your setup; however that is not your primary problem.
If you want a symlink to ALWAYS point at the same file, regardless of the where the symlink is located, then the target should be the full path; ie:
ln -s /etc/apache2/sites-available/foo.conf mysimlink-whatever.conf
Here is (line 1 of) the output of my ls -l /etc/apache2/sites-enabled
:
lrwxrwxrwx 1 root root 26 Jun 24 21:06 000-default -> ../sites-available/default
See how the target of the symlink is relative to the directory that contains the symlink (it starts with ".." meaning go up one directory).
Hardlinks are totally different because the target of a hardlink is not a directory entry but a filing system Inode.