如果我在index.php之后键入一个参数,CSS样式就会消失

时间:2012-02-14 07:01:19

标签: css mod-rewrite

如果我在着陆页index.php

后面输入任何参数,我的CSS样式就会停止工作

我在运行xampp的开发本地主机服务器上添加/测试新代码,在php / javascript / html / css中编码。 编辑:我的开发服务器是Windows Vista,我现在使用的是Firefox 10.0.1版。

今天我添加了mod_rewrite支持,允许使用我网站的URL传递参数 并偶然发现了一个我以前没考过的问题。

我正在开发的mod_rewrite允许用户在站点名称后面指定一个文本字符串,例如:

     http://www.mysite.com/Stonehenge-artifact1

并且我的mod_rewrite处理该参数并做了一些有意义的事情 - 具体来说,它从我的登陆页面index.php重定向到一个完全不同的页面,显示了Stonehenge-artifact1的照片。

问题 - 如果用户输入www.mysite.com/index.php/ialkselasdfa 我的所有CSS样式都消失了 - 我的CSS样式表中的index.php着陆页特殊字体和颜色丢失了。

我退出了所有mod_rewrite更改,包括在mysite.com文件夹空间中完全删除我的自定义.htaccess文件(使用.htaccess的本地自定义副本是mod_rewrite的步骤之一)。

我想知道现在我回到昨天(pre-mod_rewrite changes)代码后CSS样式是否会消失。果然,如果我在index.php之后键入一个参数,ANY参数,我的CSS样式表就会出现AWOL。

因此,以下URL(例如)以某种方式禁用了我的index.php

的CSS样式表
www.mysite/index.php/foo
www.mysite/index.php/css-whereAreYou

(注意:我提出mod_rewrite的原因是为了解释为什么我首先在​​网站的URL末尾输入一些内容。如果不是我测试新的mod_rewrite代码,我就不会发现这个问题。)

这是我的CSS样式表的index.php中包含的内容:

<html>
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <link rel="stylesheet" type="text/css" href="globalStyles.css" />
 </head>

我的globalStyles.css是:

root { 
  display: block;
}

body
{
   color: black;
   font-family: Gill, Helvetica, sans-serif;
   font-size: 9pt;
   background-color: RGB(243,239,240); /* light blue */
} 

p
{
    color: black;    
}

为什么在index.php之后添加字符时,我的index.php登录页面没有获得CSS样式?

4 个答案:

答案 0 :(得分:4)

您还可以在头部中使用<base>标记:

<base href="base/path/for/files/to/follow">

这样做是告诉浏览器指定的路径是根目录,并且应该相对于所述目录请求相对路径。

我在mod_rewrite遇到了同样的问题(不管你信不信,这个解决方案来自谷歌搜索,但我不得不挖掘一点)。

答案 1 :(得分:3)

因为你使用相对路径来访问文件,所以当URL末尾有额外的“目录”时,它会尝试在任何目录中启动,因为浏览器不知道更好(你重写了请求路径)。尝试更改它:

<link rel="stylesheet" type="text/css" href="/globalStyles.css" />

使用绝对路径会使其始终指向CSS文件的确切位置,无论您的网址是什么。

例如:/index.php/foo实际上会将index.php视为目录,然后将foo视为index.php的子目录,浏览器尝试在以下位置找到您的CSS文件的路径:/index.php/foo/globalStyles.css

答案 2 :(得分:2)

使用绝对路径而不是相对路径。

答案 3 :(得分:2)

在以下页面中:

www.mysite/index.php/foo

以下标记:

<link rel="stylesheet" type="text/css" href="globalStyles.css" />

指示浏览器查找名为:

的文件
www.mysite/index.php/globalStyles.css

显然它不在那里。你应该在你的情况下使用绝对路径:

<link rel="stylesheet" type="text/css" href="/globalStyles.css" />

请注意,这可能会导致另一个问题:浏览器请求:

www.mysite/globalStyles.css

可能会被mod_rewrite转换/重定向到:

www.mysite/index.php/globalStyles.css

您应该调整重写规则以忽略.css,.js,.gif(等)文件。或者,使用RewriteCond-f标志来确保该文件不存在,然后重写。