我使用 SilverStripe 作为 CMS (http://www.silverstripe.com/services/why-choose-us/open-source-cms/) 而不是 Joomla 或 Drupal,这对到目前为止的大部分。然而,这个问题太奇怪了,我什至不确定 SilverStripe 与它有什么关系。基本上,当标记输出到浏览器时,指向模板中设置的 CSS 文件的链接会丢失其前导斜线。显然,这可能会带来很大的问题。
这是相关模板中的头部部分:
<!DOCTYPE html>
<html>
<head>
<% base_tag %>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=720, maximum-scale=1.0" />
<title>$Title</title>
<link rel="stylesheet" type="text/css"
href="/framework/admin/thirdparty/jquery-notice/jquery.notice.css?m=1342411326" />
</head>
链接实际上是动态生成到模板中的,但我将这个链接放在自己中以隔离问题。即使手动添加到模板中,链接标记也将以 href="framework/admin/thirdparty/jquery-notice/jquery.notice.css?m=1342411326"结尾,原始链接减去前导正斜杠,/。有谁知道这会如何发生?不管我是在 Chrome、Safari 还是 Firefox 中,它们的行为都是一样的。
我注意到我可以通过破坏整个文档来“解决”这个问题。如果我在 <!DOCTYPE html>
之前添加一个字符,css 链接上的 href 再次指向带有前导斜杠的根目录。这是因为文档类型、基本标记还是两者的某种奇怪组合?
我遇到的一个陌生问题...
最佳答案
默认情况下,SilverStripe 会故意去掉前导斜杠,并使用基本标记来确保链接指向正确的位置。这样做的原因是为了更容易构建在子 URL 中运行时仍能正常工作的站点,例如,开发站点可能位于 http://localhost/我的网站/
.
这就是为什么如果你去掉基本标签,手提篮里的一切都会变糟的原因——SilverStripe 的构建就是期望它在那里。
但是,它不应该去除 URL 上的前导斜杠。最有可能执行此操作的是 ContentNegotiator
类,如果您乱用 doctype,这将导致不同的行为。
它以前是默认打开的,但在 2.4 和 3.0 中应该默认关闭。您使用的是什么版本的 SilverStripe?
关于php - CSS <link> href 丢失前导斜杠,利用 SilverStripe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11754189/