Вы не можете решить эту проблему, изучив только URL.
Вы говорите, что вам нужен абсолютный URL с учетом базового URL и относительного URL. Полный URL - это объединение базового и относительного URL. Как вы уже видели, знание этого никуда не поможет.
http://example.com/directory/index.php
и
http://example.com/directory/
может законно ссылаться на два разных ресурса.
http://example.com/directory/index.php
и http://example.com/directory/foo/bar/baz.php
могут законно ссылаться на один и тот же конечный ресурс.
Во втором приведенном выше примере, что является каноническим URL? Это не то, что может быть обязательно определено в вычислительном отношении. Канонический URL - это тот, который вы выбираете в качестве канонического URL.
Здесь вы на самом деле сталкиваетесь с двумя проблемами:
- Когда два разных URL ссылаются на один и тот же ресурс?
- Какой URL является каноническим URL?
1. Когда два разных URL ссылаются на один и тот же ресурс?
Это нельзя определить путем сравнения URL-адресов. Это можно определить только путем сравнения самого ресурса, то есть содержимого и заголовков HTTP.
ETag - http://en.wikipedia.org/wiki/HTTP_ETag
Короче говоря, ETag - это HTTP-заголовок, уникальный для ресурса. Он предназначен для проверки кэша, т. Е. Содержимое моего кэша совпадает с содержимым http://example.com/content?
Два идентичных ресурса, по крайней мере от одного хоста, будут иметь одинаковое значение заголовка ETag. Используйте это, если возможно (не все веб-серверы будут возвращать заголовок ETag).
HTTP заголовок и сравнение содержимого
Когда два ресурса идентичны? Когда тип содержимого и содержимое совпадают.
Сравните тип содержимого с помощью заголовка Content-Type. Сравнение самого контента - простой случай сравнения строк.
Если вы храните свойства ранее найденных ресурсов и сравниваете их с недавно найденными ресурсами, вам не нужно рассматривать полный текст ресурса для целей сравнения - хеш подойдет.
Что касается PHP, расширение HTTP даст вам все, что вам нужно, с очень удобным OO API для проверки заголовков HTTP и полного содержимого ресурса. Функция md5 () является одним из вариантов создания уникального хэша. Есть и другие.
2. Какой URL является каноническим URL?
Выберите один и придерживайтесь его. По умолчанию один URL не более каноничен, чем другой для того же ресурса. Для простоты вы можете рассмотреть самый короткий из двух URL как каноническую форму.