簡體   English   中英

用PHP規范給定基本URL的uri部分

[英]Normalizing uri part given base url, with PHP

首先,我正在為網絡爬蟲執行此操作(又名蜘蛛又名蠕蟲...)

給定兩個字符串(基本URL和相對URL),我需要確定絕對URL。 當涉及到“ SEO友好”廢話時,這尤其令人困惑,例如:

基本網址: http ://aaa.com/january/15/test找到的網址:/test.php ? aaa

我怎么知道上面不是文件夾? 例如; 絕對路徑為:

http://aaa.com/january/15/test/test.php?aaa

要么:

http://aaa.com/january/15/test.php?aaa

混亂源於是否存在有效的索引。 “ /test/index.php”還是“ /index.php”?

您無法僅通過檢查URL來解決此問題。

您說您需要給定基本URL和相對URL的絕對URL。 完整URL是基本URL和相對URL的串聯。 如您所見,知道這一點一點也沒有幫助。

http://example.com/directory/index.phphttp://example.com/directory/可以合法地引用兩個不同的資源。

http://example.com/directory/index.phphttp://example.com/directory/foo/bar/baz.php可以合法地引用同一最終資源。

在上面的第二個示例中,哪個是規范URL? 這不是必須通過計算確定的事情。 規范URL是您選擇作為規范URL的URL。

您實際上在這里面臨兩個問題:

  1. 什么時候兩個不同的URL引用相同的資源?
  2. 規范的URL是哪個URL?

1.兩個不同的URL何時引用同一資源?

無法通過以任何方式比較URL來確定。 這只能通過比較資源本身即內容和HTTP標頭來確定。

ETag - http://en.wikipedia.org/wiki/HTTP_ETag

簡而言之,ETag是一個HTTP標頭,對於資源而言是唯一的。 其目的是為了進行緩存驗證,即,我在緩存中擁有的內容是否與http://example.com/content中的內容相同?

至少來自同一主機的兩個相同資源將具有相同的ETag標頭值。 如果可能,請使用此選項(並非所有Web服務器都將返回ETag標頭)。

HTTP標頭和內容比較

什么時候兩個資源相同? 當內容類型和內容相同時。

使用Content-Type標頭比較內容類型。 比較內容本身是字符串比較的一種簡單情況。

如果您要存儲先前找到的資源的屬性並將它們與新發現的資源進行比較,則無需出於比較目的考慮該資源的全文-哈希即可。

就PHP而言, HTTP擴展將通過非常方便的OO API為您提供所需的全部內容,以檢查HTTP標頭和資源的全部內容。 md5()函數是用於生成唯一哈希的一種選項。 還有其他

2.規范URL是哪個URL?

選擇一個並堅持下去。 默認情況下,對於同一資源,一個URL不比另一個URL規范。 為簡單起見,您可能會認為兩個URL中最短的是規范形式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM