我在.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
答案 0 :(得分:4)
问题是那些都是内部重写。因此,即使您的网络服务器正在从/profile.php?username=whatever
发送数据,浏览器仍然认为它正在接收来自http://www.mydomain.com/profile/whatever
的网页。
因此,当它看到像css/screen-site.css
这样的相对网址时,会将其解析为http://www.mydomain.com/profile/css/screen-site.css
,而该网址不存在。
我至少可以想到三种不同的方法来解决问题:
最简单且可能最佳的解决方案是在您的链接前加/
,使其看起来像/css/screen-site.css
。斜杠使浏览器将URL路径视为相对于站点的根目录,而不是(它认为是)当前目录。
或者,您可以在HTML base
部分中添加head
标记,如slash197所示,类似<base href="http://www.mydomain.com/">
。这样,HTML中的所有相对网址将被解释为相对于您网站的根目录。
您 还可以使用更多重写规则解决问题,例如:
RewriteRule ^profile/((css|images|js)/.*) $1 [L]
这比前两个解决方案效率低,但是,因为浏览器不会意识到不同的URL实际上引用了相同的样式表(即使你使用外部重写告诉它他们这样做,它仍然需要查询服务器才能找到)。
答案 1 :(得分:2)
您还可以使用基本网址在config.php文件中创建变量:
$base_url = "http://www.yourdomain.com/";
然后在你的头文件中:
<link href="<?php echo $base_url; ?>css/style.css" />