如果我在着陆页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样式?
答案 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
标志来确保该文件不存在,然后重写。