1

我使用 SilverStripe 作为 CMS (http://www.silverstripe.com/services/why-choose-us/open-source-cms/) 而不是 Joomla 或 Drupal,这在很大程度上是一次很棒的体验至今。然而,这个问题太奇怪了,我什至不确定 SilverStripe 与它有什么关系。基本上,当标记输出到浏览器时,模板中设置的 CSS 文件的链接会丢失其前导斜杠。显然,这可能是非常有问题的。

这是相关模板中的 head 部分:

<!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 将再次指向根,并带有前导斜杠。这是因为文档类型、基本标签还是两者的某种奇怪组合?

我遇到的一个奇怪的问题...

4

3 回答 3

2

默认情况下,SilverStripe 故意不使用前导斜杠,并使用基本标记来确保链接指向正确的位置。这样做的原因是为了更容易构建如果站点在子 URL 中运行仍然可以工作的站点,例如,开发站点可能位于http://localhost/mysite/.

这就是为什么如果您摆脱基本标签,一切都会在手提篮中陷入地狱的原因 - SilverStripe 的构建是希望它在那里。

但是,它不应该去掉 URL 上的前导斜杠。最有可能做到这一点的是ContentNegotiator类,如果你搞砸了 doctype,那会导致不同的行为。

它过去是默认开启的,但在 2.4 和 3.0 中它应该默认关闭。您使用的是什么版本的 SilverStripe?

于 2012-10-14T22:41:31.097 回答
0

/尝试在生成链接的位置附加一个额外的内容。

于 2012-08-01T07:12:35.370 回答
0

你试过base标签吗?

如果这不起作用,您可以尝试将整个链接放在那里,例如。http://website.com/framework...

于 2012-08-01T07:58:53.767 回答