html <base />不能与href一起使用到localhost

时间:2014-02-08 18:13:32

标签: html url base

我的链接看起来像

<link rel="stylesheet" href="/utils/style.css" />

我的主网站上有我的网站所以这不是问题但是当我将所有文件移动到/ dir /我设置基本标记时:

<base href="http://localhost/dir" />

但它不起作用。如果我使用在线网址到我的网站

,它的工作完全正常
<base href="http://www.my-website.com" />

出了什么问题?

4 个答案:

答案 0 :(得分:3)

Dir是一个目录,因此你需要在它之后添加一个/,你也不需要使用base来拥有干净的URL ......如果这是你想要做的事情。

<base href="http://localhost/dir/" />

答案 1 :(得分:1)

Pawel你可以使用基本标签:

<base href="http://localhost/dir/" >

它应该在localhost上完美运行,而在实时网站的情况下,您可以直接使用根扩展名:

<base href="/dir/" >

答案 2 :(得分:0)

因为dir是一个目录,你必须以尾随/

结束

尝试

<base href="http://localhost/dir/" />

<link rel="stylesheet" href="utils/style.css" />

EXTRA

将本地主机映射到真实网址可能会更简洁,这可以解决您的问题。

在你的主机文件中应该是这样的东西

# localhost name resolution is handled within DNS itself.
    127.0.0.1       dev.my-website.com

答案 3 :(得分:0)

Pawel,回答你的评论“所以基本上问题,如果我的网址开始...”:这样想,这一切都有意义:如果你的URL:链接是绝对的,那么你的浏览器使用这些URL:s 因为它们并将它们发送到服务器,因为在这种情况下,浏览器在将它们发送到服务器之前无需将它们转换为绝对路径。这就是浏览器不关心您在href标记中指定为base的任何(非法或非法)路径的原因。 (浏览器已经拥有了所需的信息。)

我建议你使用我在下面写的方案。这个计划适合我。请注意,您在<a href> <img src>等中指定的URL:s应该都是相对的(即不是以斜杠开头),如下所示:mytoplevel-dir/mysubdir/myresource.xxx或者,如果资源位于根目录下,则如此:myresource.xxx。请注意,您应该(需要)上升任何级别(../subdir../myresource.xxx)。现在,当您将网址设为相对时,href标记的base开始变得重要。

关于使代码适合本地开发环境和实时Web服务器):只需使用PHP动态生成base标记中使用的路径。为此,您可以使用$_SERVER["SCRIPT_NAME"]并查找任何上下文路径(即本地服务器上特定于您的网站的目录)。这很好用(我用它)。例如:

<?php require_once('../common/php/URL_Manager.php'); ?>
.
.
<base href="<?php echo URL_Manager::getCurrentServerAndContextPath(); ?>" />
.
.

我的理解是<base href>应具有以/(正斜杠)结尾的完全限定路径,而相对路径应在其他地方使用,例如在<a href><img src><link href>中(对于内部链接)。

如果没有 <base href>,浏览器会将使用其地址栏中显示的路径遇到的每个相对路径解析为绝对路径 - 即发送到服务器的路径。

使用 <base href>,浏览器通过使用<base href>中所述的绝对路径将绝对路径解析为该页面上遇到的每个相对路径 - 这是发送到服务器的路径。

请注意,服务器只接收绝对路径。

最后为了完整性,我应该提一下,当你像我上面提到的那样使用base标签时,你可能需要用当前路径补充每个锚链接,如下所示:

<a href="<?php echo URL_Manager::getCurrentPath(); ?>#menuBookmark">

而不只是:

<a href="#menuBookmark">