Vous ne pouvez pas résoudre ce problème en examinant uniquement l'URL.
Vous dites que vous avez besoin de l'URL absolue avec une URL de base et une URL relative. L'URL complète est la concaténation de l'URL de base et de l'URL relative. Comme vous l'avez vu, sachant cela n'aide pas un peu.
http://example.com/directory/index.php
et http://example.com/directory/
peut légitimement se référer à deux ressources différentes.
http://example.com/directory/index.php
et http://example.com/directory/foo/bar/baz.php
peuvent légitimement se référer à la même ressource ultime.
Dans le deuxième exemple ci-dessus, quelle est l'URL canonique? Ce n'est pas quelque chose qui peut être nécessairement déterminé par calcul. L'URL canonique est celle que vous choisissez comme URL canonique.
Vous êtes confronté en fait deux problèmes:
- Quand les deux URL différentes se réfèrent à la même ressource?
- Quelle URL est l'URL canonique?
1. Quand deux URL différentes font-elles référence à la même ressource?
Cela ne peut pas être déterminé en comparant les URL de quelque façon que ce soit. Cela peut uniquement être déterminé en comparant la ressource elle-même, c'est-à-dire le contenu et les en-têtes HTTP.
ETag-http://en.wikipedia.org/wiki/HTTP_ETag
En bref, le ETag est un en-tête HTTP qui est unique pour une ressource. Son but est de valider le cache, c'est-à-direLe contenu que j'ai dans mon cache est-il le même que le contenu au http://example.com/content? Deux ressources identiques, au moins provenant du même hôte, auront la même valeur d'en-tête ETag. Utilisez ceci si possible (tous les serveurs web ne renverront pas un en-tête ETag).
en-tête HTTP et la comparaison du contenu
Lorsque deux ressources identiques? Lorsque le type de contenu et le contenu sont les mêmes
Comparez le type de contenu à l'aide de l'en-tête Content-Type. Comparer le contenu lui-même est un cas simple de comparaison de chaînes.
Si vous stockez des propriétés de ressources précédemment trouvées et que vous les comparez à des ressources nouvellement trouvées, vous n'avez pas besoin de prendre en compte le texte complet de la ressource à des fins de comparaison.
En ce qui concerne PHP, le HTTP extension vous donnera tout ce dont vous avez besoin avec une API OO très pratique pour examiner les en-têtes HTTP et le contenu complet d'une ressource. La fonction md5() est une option pour générer un hachage unique. Il y en a d'autres.
2. Quelle URL est l'URL canonique?
Choisissez-en un et respectez-le. Par défaut, une URL n'est pas plus canonique qu'une autre pour la même ressource. Pour plus de simplicité, vous pouvez considérer la plus courte des deux URL comme étant la forme canonique.
Je pense qu'un * ver * est quelque chose de différent;) –
http://en.wikipedia.org/wiki/Web_crawler#cite_ref-36 Peut-être un nom de vieille école? – Christian
Eh bien, cela semble se rapporter à une application réelle qui a été nommée de cette façon. Le terme * ver * fait normalement référence à un certain type de logiciel malveillant. Mais je ne veux pas discuter, je viens de le remarquer;) –