将相对链接转换为绝对?

时间:2009-02-13 08:48:53

标签: url relative-path hyperlink

我正在使用PHP和正则表达式编写一个小脚本

此脚本的目的是提取页面中的所有链接,并将这些链接转换为绝对链接 - 当它是相对的时 - 我想到相对链接是如何工作的,但它们也是一些问题

我们可以说我们有这个页面http://www.example.com/xxx1/xxx2/xxx3.html 如果此页面包含以下链接

index.html ---绝对链接将为http://www.example.com/xxx1/xxx2/index.html

./ index.html ---绝对链接为http://www.example.com/xxx1/xxx2/index.html

../ index.html ---绝对链接为http://www.example.com/xxx1/index.html

/index.html ---绝对链接为http://www.example.com/index.html

所以

index.html =将在当前目录中打开

./ index.html =也会在当前目录中打开

../ index.html =将在父目录中打开

/index.html =将在根目录中打开

问题是如果URL是搜索引擎友好的?

说我们有这个网址

((case1)):http://www.example.com/xxx1/xxx2/xxx3/index/

((案例2)):http://www.example.com/xxx1/xxx2/xxx3/index

是case1中的“index”目录或页面?是case2中的目录还是页面? 以及如何将以下链接看作是案例1和2中的绝对链接

index.html ---?

./ index.html ---?

../ index.html ---?

/index.html ---?

我不确定这对你们中的某些人来说是否是一个简单的问题,但对我来说这是令人困惑的?

谢谢:)

1 个答案:

答案 0 :(得分:3)

直接回答你的例子

案例1 中,index是网址的“目录组件”,而案例2 index是“文件组件” “的URL。这与它实际上是Web服务器上的常规文件还是目录无关 - 请参阅下面的说明。如果服务器在这些URL上提供HTML页面,我会称之为“页面”。

案例1:(来自http://www.example.com/xxx1/xxx2/xxx3/index/的链接)

  1. index.html - > http://www.example.com/xxx1/xxx2/xxx3/index/index.html
  2. ./index.html - > http://www.example.com/xxx1/xxx2/xxx3/index/index.html
  3. ../index.html - > http://www.example.com/xxx1/xxx2/xxx3/index.html
  4. /index.html - > http://www.example.com/index.html
  5. 案例2:(来自http://www.example.com/xxx1/xxx2/xxx3/index的链接)

    1. index.html - > http://www.example.com/xxx1/xxx2/xxx3/index.html
    2. ./index.html - > http://www.example.com/xxx1/xxx2/xxx3/index.html
    3. ../index.html - > http://www.example.com/xxx1/xxx2/index.html
    4. /index.html - > http://www.example.com/index.html
    5. 所以唯一保持不变的是绝对链接 - 4。

      解释

      链接是相对于浏览器所在的URL,可能不是您最初输入的URL(例如,在HTTP重定向上)。一旦您关注链接或被重定向,大多数Web浏览器都会使用当前地址更新URL栏,因此除非您刚编辑了该URL,否则您看到的地址就是重要的地址。

      以斜杠结尾的URL被认为是指目录(RFC2396隐含的URI语法,虽然它实际上并没有这样称呼它们),否则它们被认为是指目录中的文件。

      - 旁注: 这不一定与Web服务器用于提供文件的文件系统路径(如果有)类型相对应。大多数网络当被要求将URL映射到其文件系统上的目录时,服务器将为目录中的文件提供一些集合名称(通常是index.html,但通常可以配置选择),或者由目标生成的HTML目录列表。服务器(如果禁用了访问错误)。当请求没有尾部斜杠的类似路径的“文件URL”时,通常会提供相同的操作,在这种情况下,“文件URL”实际上映射到目录文件系统路径。 -

      这可能导致不一致,例如上面的示例,其中“文件URL”http://www.example.com/xxx1/xxx2/xxx3/index可能等同于“目录网址”http://www.example.com/xxx1/xxx2/xxx3/index/,但相对链接可能引用不同的路径两个URL,一个可能有效,另一个可能被破坏。

      因此,当链接到目录时,建议始终使用“目录URL”(带有终止斜杠)而不是等效的“文件URL” - 例如链接到http://www.ietf.org/meetings/而非http://www.ietf.org/meetings即使两者都在同一页面上也是如此。事实上,许多Web服务器都配置为使用HTTP 301重定向响应将请求后者的客户端重定向到前者。如果您在浏览器的URL栏中输入后者,您可以看到这一点 - 一旦获得响应,URL栏就会变为前者。