Как структурировать содержимое PHP-контента для использования как в незащищенных (http://), так и в защищенных (https://) областях, а также в нескольких каталогах?
У меня есть файл нижнего колонтитула, который содержит ссылки и изображения. Этот файл используется на моей главной домашней странице и в нескольких каталогах. Он также используется в защищенной части моего сайта (https://) после входа пользователя.
Каков наилучший способ организовать ссылки таким образом, чтобы (1) они могли использоваться в незащищенной (http://) и защищенной (https://) областях моего сайта, а (2) также иметь возможность использовать include в разных каталогах на моем сайте?
Кажется, что для того, чтобы удовлетворить мое первое требование (1), мне пришлось бы использовать относительные ссылки; однако, чтобы удовлетворить мое второе требование (2), мне нужно было бы использовать абсолютные ссылки.
Любая помощь, которую вы могли бы оказать, была бы великолепна!
<div id="footer">
<a href="http://www.sample-link.com" target="_blank">
<img id="sample-image" src="http://<? print $_SERVER['SERVER_NAME'] ?>/media/sample-image.png" />
</a>
</div>
2 ответа
Просто используйте //example.com/foo.blah
,
<img id="sample-image" src="//<? print $_SERVER['SERVER_NAME'] ?>/media/sample-image.png" />
Совершенно очевидно, что HTTP - это протокол, но существуют и другие протоколы, такие как GOPHER, HTTPS, FTP и т. Д.
Вместо того, чтобы быть на URL суслика gopher://example.com
Вы можете просто сослаться на //example.com
и протокол будет работать без него. Если вы хотите связать HTTP-контент с HTTPS, вы должны указать протокол.
Это может быть интересно в долгосрочной перспективе, например, если появится другой протокол, который работает почти так же, как HTTP (например, Google пытается сделать spdy://
) вам придется обновить весь ваш код. Используйте конкретный протокол, когда вам необходимо получить контент из этого протокола, и вы можете избежать этой проблемы через 5 лет.
Относительные URL-адреса описаны в RFC для URL-адресов, RFC3986:
http://tools.ietf.org/html/rfc3986
4.2. Относительная ссылка
Относительная ссылка использует преимущества иерархического синтаксиса (раздел 1.2.3) для выражения ссылки URI относительно пространства имен другого иерархического URI.
relative-ref = relative-part [ "?" query ] [ "#" fragment ]
relative-part = "//" authority path-abempty
/ path-absolute
/ path-noscheme
/ path-empty
URI, на который ссылается относительная ссылка, также известная как целевой URI, получается путем применения алгоритма эталонного разрешения из Раздела 5.
Относительная ссылка, которая начинается с двух символов косой черты, называется ссылкой на сетевой путь; такие ссылки используются редко. Относительная ссылка, которая начинается с одного символа косой черты, называется ссылкой на абсолютный путь. Относительная ссылка, которая не начинается с символа косой черты, называется ссылкой на относительный путь.
Сегмент пути, который содержит символ двоеточия (например, "this:that"), нельзя использовать в качестве первого сегмента ссылки на относительный путь, так как он будет ошибочно принят за имя схемы. Такой сегмент должен предшествовать точечный сегмент (например, "./this:that"), чтобы сделать ссылку на относительный путь.
Чтобы понять, что они подразумевают под "путем", "авторитетом" и "схемой", обратитесь к диаграмме в том же RFC:
foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
| _____________________|__
/ \ / \
urn:example:animal:ferret:nose
Все это при условии, что вы работаете с несколькими доменами, как вопросы о <img src="./relative/url/foo.png">
или же img src="/absolute/path/while/domain/relative/foo.png"
ответили много раз.
Используйте схему относительных URI.
//example.com/foo/bar/
Это сохранит http или https.