我在.htaccess
文件中有以下代码:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.php [NC,L]
RewriteRule ^profile/(.*)$ profile.php?username=$1
我的CSS样式表在所有页面上工作,除了匹配最后一条规则(用于配置文件)的页面:
RewriteRule ^profile/(.*)$ profile.php?username=$1
例如,当我输入www.mydomain.com/register
时,样式表正在工作。但是当我输入www.mydomain.com/profile/username
时,样式表不起作用。
我的样式表和其他辅助文件在不同的文件夹:css/
, images/
, js/
等
我能做什么?请帮忙:D
编辑:我有一个页眉和页脚:
includes/header.php
, includes/footer.php
。在文件header.php
中是PHP代码:
<?php include 'head.php'; ?>
head.php
是CSS的元标签:
<link rel="stylesheet" href="css/screen-site.css">
下面是文件夹结构的截图:http://shrani.si/f/3z/13T/1OKC8ZJc/site.png
问题是这些都是内部的重写。所以,即使你的服务器从/profile.php?username=whatever
发送数据,浏览器仍然认为它从http://www.mydomain.com/profile/whatever
接收页面。
因此,当它看到像css/screen-site.css
这样的相对URL时,它将其解析为不存在的http://www.mydomain.com/profile/css/screen-site.css
。
我能想到至少三种不同的方法来解决这个问题:
-
最简单也是最好的解决方案是在链接前添加
/
,使它们看起来像/css/screen-site.css
。斜杠使浏览器将URL路径视为相对于站点根目录的路径,而不是(它认为是)当前目录。 -
或者,您可以在HTML
head
部分中包含base
标记,如slash197所建议的,类似于<base href="http://www.mydomain.com/">
。这样,HTML中的所有相对url都将被解释为相对于您站点的根目录。 -
你可以也可以用更多的重写规则来解决这个问题,比如:
RewriteRule ^profile/((css|images|js)/.*) $1 [L]
这比前两种解决方案效率低,但是,因为浏览器不会意识到不同的url实际上引用了相同的样式表(即使您使用外部重写来告诉它它们确实引用了相同的样式表,它仍然需要查询服务器来查找)。
你也可以在config.php文件中用你的基url创建一个变量:
$base_url = "http://www.yourdomain.com/";
然后在你的头文件中:
<link href="<?php echo $base_url; ?>css/style.css" />