我的链接看起来像这样
<link rel="stylesheet" href="/utils/style.css" />
我的网站最初是放在主目录下的,所以没有问题。但当我把所有文件都移动到/dir/目录下时,我设置了基本标签:
<base href="http://localhost/dir" />
但是它不起作用。但是如果我使用我的网站的在线URL,它完全正常运行。
<base href="http://www.my-website.com" />
出了什么问题?
我的链接看起来像这样
<link rel="stylesheet" href="/utils/style.css" />
我的网站最初是放在主目录下的,所以没有问题。但当我把所有文件都移动到/dir/目录下时,我设置了基本标签:
<base href="http://localhost/dir" />
<base href="http://www.my-website.com" />
出了什么问题?
Dir是一个目录,因此您需要在其后添加/,并且您不需要使用base来获得干净的URL... 如果这就是您想要做的。
<base href="http://localhost/dir/" />
<link rel="stylesheet" href="http://localhost/utils/style.css" />
- user3287764<base href="http://localhost/dir/" >
它应该在本地主机上完美运行,而在实际网站的情况下,您可以直接使用根扩展名:
<base href="/dir/" >
试试
<base href="http://localhost/dir/" />
<link rel="stylesheet" href="utils/style.css" />
额外
将本地主机映射到真实的URL可能会更整洁,这将解决您的问题。
在您的host文件中应该是这样的:
# localhost name resolution is handled within DNS itself.
127.0.0.1 dev.my-website.com
base
标签中指定的任何(非法或合法)路径的原因。(浏览器已经拥有所需的信息。)
我建议你使用我下面写的方案。这个方案对我来说效果很好。请注意,在 <a href> <img src>
等中指定的 URL 必须都是相对路径(即不以斜杠开头),例如:mytoplevel-dir/mysubdir/myresource.xxx
或者,如果资源直接位于根目录下,则为:myresource.xxx
。请注意,您不应该(需要)上升任何级别(../subdir
或 ../myresource.xxx
)。现在,当您使 URL 变成相对路径后,base
标签的 href
就变得重要了。
关于如何使代码适用于本地开发环境和线上服务器:只需使用 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">
alert(document.baseURI)
,然后查看它返回的基本 URI。如果这不是您想要的结果,则需要解决这个问题。(您可以通过在 URL 地址栏中输入javascript:alert(document.baseURI)
来运行它) - Joeytje50base
元素,那么你已经做错了什么。” // 不要通过http://localhost/dir
来调用你的项目,而是为该项目设置一个适当的虚拟主机和本地域名,这样你就不会遇到这样的问题了。此外,你的设置将更接近后续的生产环境,因此在从开发环境部署到现场时也会减少错误潜力。 - CBroe