php - CSS <link> href 丢失前导斜杠,利用 SilverStripe

标签 php css hyperlink doctype silverstripe

我使用 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/

相关文章:

javascript - React Native 使长图像适合屏幕宽度并滚动

asp.net-mvc - 如果 Controller 操作重定向到外部 url,您将在函数中返回什么?

php - 当我尝试创建新项目时出现curl错误

javascript - WooCommerce:如何通过 URL 将产品价格添加到购物车?

php - 如何缓存远程网页资源实现网页超速?

javascript - 自动完成无法对 json 数据进行排序

html - CSS 3 列流体布局问题,第 3 列太宽

css - 带有 'p' 标签问题的 html css 列表

javascript - 新标签页 JavaScript 链接

html - 链接到存档页面上的博客文章(不是 Wordpress)