CSS3 PIE-行为HTC文件不';在访问站点时不加载尾随反斜杠

CSS3 PIE-行为HTC文件不';在访问站点时不加载尾随反斜杠,css,internet-explorer-8,internet-explorer-7,css3pie,Css,Internet Explorer 8,Internet Explorer 7,Css3pie,当我以两种不同的方式访问使用CSS3 PIE的站点时,有一种情况下找不到HTC文件。我使用示例域名和路径名来说明下面的问题。是什么导致了这一切 根据,url是相对于样式表的-即,在您的例子中是cdn。我不知道为什么它会起作用 然而,由于它部分起作用,我有另一个答案给你。浏览器会将/site url解释为网站中的一个页面-浏览器无法判断它是一个末端没有/的文件夹。这意味着相对路径将相对于网站的根文件夹。解决这个问题的最简单方法是将url更改为/site/content/css/pie.htc根据,

当我以两种不同的方式访问使用CSS3 PIE的站点时,有一种情况下找不到HTC文件。我使用示例域名和路径名来说明下面的问题。是什么导致了这一切

根据,url是相对于样式表的-即,在您的例子中是cdn。我不知道为什么它会起作用

然而,由于它部分起作用,我有另一个答案给你。浏览器会将/site url解释为网站中的一个页面-浏览器无法判断它是一个末端没有/的文件夹。这意味着相对路径将相对于网站的根文件夹。解决这个问题的最简单方法是将url更改为/site/content/css/pie.htc

根据,url是相对于样式表的,即在您的示例中是cdn。我不知道为什么它会起作用


然而,由于它部分起作用,我有另一个答案给你。浏览器会将/site url解释为网站中的一个页面-浏览器无法判断它是一个末端没有/的文件夹。这意味着相对路径将相对于网站的根文件夹。最简单的修复方法是将url更改为/site/content/css/pie.htc

因为
行为是Internet Explorer的非标准css属性,所以它的实现也是非标准的(如中所述,没有规范)。看起来唯一的选择是确保声明中URL的值是绝对路径,而不是相对路径

这解决了问题:

.rounded-corners
{
    behavior: url(/site/content/css/pie.htc);
}

由于
behavior
是Internet Explorer的非标准CSS属性,因此它的实现也是非标准的(如中所述,没有针对它的规范)。看起来唯一的选择是确保声明中URL的值是绝对路径,而不是相对路径

这解决了问题:

.rounded-corners
{
    behavior: url(/site/content/css/pie.htc);
}

尽管你在其他地方对这个问题发表了评论,但这实际上并不是IE中的一个bug;它完全理性地处理相对路径

发生此问题的原因是,就URL路径而言,这两个URL(带斜杠和不带斜杠)实际上位于不同的目录中

  • http://sampledomain.com/site
    --这被视为
    站点
    是根目录中的文件名

  • http://sampledomain.com/site/
    ——这被视为
    站点
    是根目录中的一个目录,您正在该目录中加载默认文件

因此,就浏览器而言,这两个URL位于不同的目录路径中。因此,如果指定一个相对路径,它将与每个路径中的不同路径相对,其中一个路径显然不会指向正确的位置。如果您有其他具有相对路径的项目,例如图像,它们也会有相同的问题,并且这将出现在所有浏览器中,而不仅仅是IE。(因此,我假设您在该页面上没有很多其他相对路径)

正如您已经计算出的,快速解决方案是将其转换为绝对路径,从斜线开始。这将确保它从站点中的同一位置加载,而不管加载它的URL是什么

然而,这个问题暗示了一个更大的问题。一个行为良好的站点不应该允许这两个URL都有效。不带斜杠的URL应重定向到带斜杠的URL;它不应该简单地加载相同的内容,不管是否有斜杠

允许两个URL加载相同的内容显然不利于站点的SEO。这意味着谷歌会认为你的网站有两个相同内容的页面,这反过来会被算作你谷歌排名的一个减分

使用.htaccess/mod_rewrite很容易解决这个问题,理想情况下,您可以像解决最初的CSS3Pie加载问题一样紧急地解决这个问题


希望这能有所帮助。

尽管你在其他地方对这个问题发表了评论,但这实际上并不是IE中的一个bug;它完全理性地处理相对路径

发生此问题的原因是,就URL路径而言,这两个URL(带斜杠和不带斜杠)实际上位于不同的目录中

  • http://sampledomain.com/site
    --这被视为
    站点
    是根目录中的文件名

  • http://sampledomain.com/site/
    ——这被视为
    站点
    是根目录中的一个目录,您正在该目录中加载默认文件

因此,就浏览器而言,这两个URL位于不同的目录路径中。因此,如果指定一个相对路径,它将与每个路径中的不同路径相对,其中一个路径显然不会指向正确的位置。如果您有其他具有相对路径的项目,例如图像,它们也会有相同的问题,并且这将出现在所有浏览器中,而不仅仅是IE。(因此,我假设您在该页面上没有很多其他相对路径)

正如您已经计算出的,快速解决方案是将其转换为绝对路径,从斜线开始。这将确保它从站点中的同一位置加载,而不管加载它的URL是什么

然而,这个问题暗示了一个更大的问题。一个行为良好的站点不应该允许这两个URL都有效。不带斜杠的URL应重定向到带斜杠的URL;它不应该简单地加载相同的内容,不管是否有斜杠

允许两个URL加载相同的内容显然不利于站点的SEO。这意味着谷歌会认为你的网站有两个相同内容的页面,这反过来会被算作你谷歌排名的一个减分

使用.htaccess/mod_rewrite,一个