Я видел этот вопрос, но он отвечает на другой вопрос.
Сегодня у меня возникла странная (по крайней мере, для меня) проблема. Проблема в том, что у меня есть этот код на моем сайте ...
<link rel = "icon" type = "image/png" sizes = "16x16" href = "~/img/TT_favicon_16px.png" />
Фавикон был возвращен почти на всех страницах сайта, но не на одной из страниц сайта.
Я просто придумал (из ничего) убрать знак тильды, и он начал работать на всех страницах сайта.
<link rel = "icon" type = "image/png" sizes = "16x16" href = "/img/TT_favicon_16px.png" />
Это вызвало у меня любопытство, и я хотел понять, в чем разница между ними ...
Это контекстно.
Допустим, URL-адрес текущей страницы - http://example.com/foo/bar.html
.
Абсолютные ссылки пути, начинающиеся с косой черты, например /quux/grault.html
, заменяют весь путь, оставляя сервер в покое: http://example.com/quux/grault.html
.
Ссылки относительного пути, не начинающиеся с косой черты, например fred/baz.html
, будут добавляться к последней косой черте пути: http://example.com/foo/fred/baz.html
.
Что касается HTTP и его интерпретации, в вашей тильде нет ничего особенного. Это не полный URL-адрес, и он не начинается с косой черты, поэтому это URL-адрес относительного пути, и в нашем примере вы получите этот URL-адрес: http://example.com/foo/~/img/TT_favicon_16px.png
. Когда вы удаляете тильду, она становится ссылкой абсолютного пути, и вы получаете http://example.com/~/img/TT_favicon_16px.png
.
Когда вы переходите по этим двум ссылкам, то, что будет обслуживаться, зависит от конфигурации вашего веб-сервера. Я никогда не пробовал использовать такую ссылку, как http://example.com/~/...
или http://example.com/foo/~/...
, но сомневаюсь, что она сработает - большинство веб-серверов не настроены для ответа на такой URL-адрес (и действительно, на моем компьютере я получаю 404 Not Found). Невозможно сказать, почему вы получили ответ, не проверив, как настроен ваш веб-сервер.
Спасибо за объяснение, но чего я не могу понять, так это разрешения знака тильды в теге <link>
. Я знаю, что .Net переводит это в корень приложения, но с тегом <link>, как он переводится, или это Visual Studio или сама .Net, которая здесь творит чудеса?
«Когда вы удаляете тильду, она становится ссылкой абсолютного пути, и вы получаете http://example.com/~/img/TT_favicon_16px.png
». ... На самом деле, если он удаляет тильду, он не получает URL-адрес с тильдой в нем. Он просто получает http://example.com/img/TT_favicon_16px.png
Используете ли вы какие-либо мета-теги в своем HTML-коде страниц, где значок не работает и где он работает?