Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 为什么W3C链接验证程序会给出;400 URL必须是绝对的;?_Html_Css - Fatal编程技术网

Html 为什么W3C链接验证程序会给出;400 URL必须是绝对的;?

Html 为什么W3C链接验证程序会给出;400 URL必须是绝对的;?,html,css,Html,Css,我正在使用非常简单的HTML/CSS建立一个网站。我正在做的一件稍微棘手的事情涉及到标记。我希望能够在本地文件系统上加载我的网站页面(这样我可以在上传之前轻松地在本地测试网站),当然也可以从我的实际网站加载。因此,在我的标记中,我放置了如下内容: <base href="." /> 或 此标记的目的是使页面的基本URL成为我的网站的根页面,无论我是在本地查看页面还是通过http:。那么我的URL总是相对于那个根的;要链接到位于我的网站根目录中名为“support.html”

我正在使用非常简单的HTML/CSS建立一个网站。我正在做的一件稍微棘手的事情涉及到
标记。我希望能够在本地文件系统上加载我的网站页面(这样我可以在上传之前轻松地在本地测试网站),当然也可以从我的实际网站加载。因此,在我的
标记中,我放置了如下内容:

<base href="." />


此标记的目的是使页面的基本URL成为我的网站的根页面,无论我是在本地查看页面还是通过http:。那么我的URL总是相对于那个根的;要链接到位于我的网站根目录中名为“support.html”的页面,我只需执行
href=“support.html”
,要链接到根目录中“images”目录中的图像,我可以执行“images/myimg.jpeg”

这很有效。我已经将我的网站上传到了我的服务器上,我可以使用Safari、Chrome和Firefox浏览我的页面并跟踪链接;这三种浏览器在我使用
标记的方式上似乎都没有问题。同时,我可以直接从本地机器上的文件系统打开一个.html文件,看到一切正常。据我所知,我所做的是完全合法的HTML,只是可能有点非传统

但是W3C链接验证程序似乎并不这么认为。它到处呕吐,错误如下:

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

注意,在第208行,给出的链接是
;W3C验证程序似乎错误地在其前面添加了前导/前缀,而没有使用页面中给定的基本URL

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

请注意,这些不仅仅是警告。它们阻止W3C链接验证程序正确测试我的页面链接。事实上,页面上有一个错误的链接,但是验证器没有找到它,因为它被这些“URL必须是绝对的”问题所包围,无法正确测试链接


谢谢!哦,如果有关系的话,这是DTD HTML4.01过渡版。

这是一个非常丑陋的JS解决方案。没有直接回答这个问题,但我认为通过提供与

见:

因为,正如@alohci所说,规范规定它必须是一条绝对路径:

无关的问题:为什么不使用HTML 5?在HTML4中,考虑删除<代码> <代码>,并使用<代码> HeRF=“/Suff.html”< /COR> ORIOL,这不能实现我想要的行为。href=“/support.html”将相对于基本URL对其进行评估,这对于http:case很好,但在本地打开.html文件时不起作用,因为在后一种情况下,没有“网站的基本URL”的概念,相对于该URL对“/support.html”进行评估。,但看起来链接验证器还没有更新到这一点。如果你用HTML 5 DOCTYPE得到相同的结果,你可以考虑提交一个bug报告。如果我违反了规范,使用了相对的基本URL,结果以某种实际的方式咬到了我,我可能会采用这种解决方案。这是一个丑陋的黑客,但我的页面足够简单,我认为它将工作良好,可靠。谢谢
<base href=".." >
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);
}