当CSS不在根目录下时,为什么不能链接我的CSS?

时间:2018-08-28 01:48:03

标签: php html css

我一直在尝试重组网站的文件夹结构,以使用户无法通过URL访问某些目录或文件,并将这些文件夹移动到基于this answer的根文件夹之外。由于我正在本地服务器(xampp)上进行测试,因此我在httpd文件中对此进行了更改:

DocumentRoot "C:/xampp/htdocs/website"
<Directory "C:/xampp/htdocs/website">...</Directory>

现在我的网站的文件夹结构如下:

htdocs
    css
        styles.css
    includes
        header.php
    website
        index.php

在浏览器中正确键入localhost会显示index.php,其中包括带有include '../includes/header.php';的标题。在header.php中,我尝试过这样链接我的CSS文件:

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

我认为这将只是从includeswebsitecss的目录,因为该目录对我的所有include都有效,但是无论我尝试了什么(包括其他链接)除非将css文件夹放在根目录内的某个位置,否则我的CSS无法工作。我还尝试向CTRL+F5发送垃圾邮件,在每个主流浏览器中打开我的网站,然后重新启动Apache。

我敢肯定,对此我必须忽略一个简单的解释。

2 个答案:

答案 0 :(得分:3)

php包含是由php解释器本身完成的(它可以访问所有系统),并且用户访问您的网站无法对其进行修改,用户甚至不知道也不知道,因为没有同意他这样做。

但是出于明显的安全原因,您不能让用户访问父目录。试想一下,如果有人可以请求../../../home/youruser/并指向服务器上的任何文件!那将是疯狂的,而且是一个非常大的安全漏洞。

执行请求时,您无法从DocumentRoot路径上移。

您必须将css内的website文件夹移动到并使用/css/style.css指向它。

答案 1 :(得分:1)

您不能阻止人们加载通过link标签提供的CSS。他们的浏览器已经在您的页面加载时对其进行了缓存。

可以使用您介绍的结构,并使用style标签通过服务器端包含项传递CSS。

服务器端CSS文件

在../css/styles.css中,放置样式表数据。稍后将通过PHP include将其内联导入。

h1 {
  text-decoration: underline;
  font-size: 1.4em;
}

服务器端注入样式

<html>
<head>
  <title>Example inline CSS</title>
  <style media="all">
  <?php include_once '../css/style.css'; ?>
  </style>
</head>
<body>
  <h1>Page with server-side CSS.</h1>
</body>
</html>

样本输出

enter image description here

现在,所有这些都已经说完了-我不确定您为什么要想要执行任何此类操作。网络设计为开放式-共享代码和技术是HTML,CSS和JavaScript如此成功的很大一部分。试图隐藏您的技术不会阻止任何想要“窃取”您的人,并且可能会导致您网站的性能和稳定性问题。