我正在使用非常简单的 HTML/CSS 建立一个网站。我正在做的一件有点棘手的事情涉及 <base>
标签。我希望能够在我的本地文件系统上加载我的网站页面(这样我可以在上传之前轻松地在本地测试网站),当然也可以从我的实际网站上加载。所以在我的<head>
标签我放了类似的东西:
<base href="." />
或
<base href=".." >
此标记的目的是使页面的基本 URL 成为我网站的根页面,无论我是在本地还是通过 http: 查看该页面。那么我的 URL 总是相对于那个根;要链接到位于我网站根目录中的名为“support.html”的页面,我可以做 href="support.html"
, 要链接到该根目录内“图像”目录中的图像,我可以执行“图像/myimg.jpeg”。
这很好用。我已将我的网站上传到我的服务器,我可以使用 Safari、Chrome 和 Firefox 浏览我的页面并点击链接;所有三种浏览器似乎都对我使用 <base>
的方式没有问题。标签。同时,我可以直接从本地机器上的文件系统打开我的一个 .html 文件,一切正常。据我所知,我正在做的是完全合法的 HTML,只是可能有点不合常规。
但是 W3C Link Validator 似乎并不这么认为。它吐得满地都是错误,例如:
Line: 208 /developer.html
Status: 400 URL must be absolute
This is usually the sign of a malformed URL that cannot be parsed by the server. Check the syntax of the link.
请注意,在第 208 行给出的链接是 <A HREF="developer.html" target="_blank">
; W3C 验证器似乎错误地在其前面添加了前导/,而不是使用页面中给出的基本 URL。
所以我的问题是:W3C 链接验证器是否完全错误?是不是太笨了看不懂<base>
标签,即使它们是合法的 HTML?或者事实上,我正在做的事情有问题,以至于我需要修复我的页面(即使它们在我尝试过的所有浏览器中都能正常工作)?
请注意,这些不仅仅是警告。他们阻止 W3C 链接验证器正确测试我的页面链接。事实上,页面上有一个错误的链接,但验证器没有找到它,因为它被这些“URL 必须是绝对的”问题所包围,无法正确测试链接。
谢谢!哦,如果重要的话,这是 DTD HTML 4.01 Transitional。
最佳答案
这是一个非常丑陋的 JS 解决方案。不直接回答问题,但我认为通过提供与 <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 所说,规范规定它必须是绝对路径: http://www.w3.org/TR/html4/struct/links.html#edef-BASE
关于html - 为什么 W3C 链接验证器给出 "400 URL must be absolute"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28650377/