为什么W3C链接验证器提供" 400 URL必须是绝对的"?

时间:2015-02-21 19:35:27

标签: html css

我正在使用相当简单的HTML / CSS设置网站。我正在做的一件有点棘手的事情涉及<base>标签。我希望能够在我的本地文件系统上加载我的网站页面(所以我可以在上传之前轻松地在本地测试网站),当然还有我的实际网站。所以在我的<head>标签中我添加了类似的内容:

<base href="." />

<base href=".." >

此标记的目的是使页面的基本URL成为我网站的根页,无论我是在本地还是通过http:查看页面。然后我的URL总是相对于那个根;链接到名为&#34; support.html&#34;的页面它位于我的网站的根目录中,我可以href="support.html",链接到&#34;图像&#34;中的图像。我可以做的根目录中的目录&#34; images / myimg.jpeg&#34;。

这很有效。我已将我的网站上传到我的服务器,我可以浏览我的网页并使用Safari,Chrome和Firefox关注链接;我使用<base>标签的方式似乎没有任何问题。同时,我可以直接从本地机器上的文件系统打开我的.html文件,看看一切正常。据我所知,我所做的是完全合法的HTML,可能只是略微不合常规。

但W3C Link Validator似乎并不这么认为。它在整个地方都出现了错误,例如:

  

行:208 /developer.html
  状态:400网址必须是绝对的   这通常是服务器无法解析的格式错误的URL的标志。检查链接的语法。

请注意,在第208行,给出的链接为<A HREF="developer.html" target="_blank">; W3C验证器似乎错误地在其上添加了前导/,而不是使用页面中给出的基本URL。

所以我的问题是:W3C链路验证器完全错了吗?理解<base>标签是否过于愚蠢,即使它们是合法的HTML?或者,事实上,我正在做的事情有问题,因此我需要修复我的页面(即使它们在我尝试的所有浏览器中都能正常工作)?

请注意,这些不仅仅是警告。他们阻止W3C链接验证器正确测试我的页面链接。事实上,页面上有一个错误的链接,但验证器找不到它,因为它太过于包含在这些中,因此URL必须是绝对的&#34;正确测试链接的问题。

谢谢!哦,如果重要的话,这就是DTD HTML 4.01 Transitional。

1 个答案:

答案 0 :(得分:1)

这是一个非常难看的JS解决方案。不能直接回答这个问题,但是#34;会给对话做出贡献&#34;我认为通过为<base>

提供有希望的等效功能
window.onload=function () {
    var baseURL="..";
    var a=document.getElementsByTagName('a');
    for (link in a) {
        if (isRelative(a[link].href)) {
            a[link].href=baseURL+"/"+a[link].href;
       }
    }
};       

function isRelative(url) {
    var r = new RegExp('^(?:[a-z]+:)?//', 'i');
    return r.test(url);
}

请参阅:How to test if a URL string is absolute or relative?

因为正如@alohci所说,spec规定它必须是一条绝对的道路: http://www.w3.org/TR/html4/struct/links.html#edef-BASE