我一直在尝试重组网站的文件夹结构,以使用户无法通过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">
我认为这将只是从includes
或website
到css
的目录,因为该目录对我的所有include都有效,但是无论我尝试了什么(包括其他链接)除非将css
文件夹放在根目录内的某个位置,否则我的CSS无法工作。我还尝试向CTRL+F5
发送垃圾邮件,在每个主流浏览器中打开我的网站,然后重新启动Apache。
我敢肯定,对此我必须忽略一个简单的解释。
答案 0 :(得分:3)
php包含是由php解释器本身完成的(它可以访问所有系统),并且用户访问您的网站无法对其进行修改,用户甚至不知道也不知道,因为没有同意他这样做。
但是出于明显的安全原因,您不能让用户访问父目录。试想一下,如果有人可以请求../../../home/youruser/
并指向服务器上的任何文件!那将是疯狂的,而且是一个非常大的安全漏洞。
执行请求时,您无法从DocumentRoot路径上移。
您必须将css
内的website
文件夹移动到并使用/css/style.css
指向它。
答案 1 :(得分:1)
您不能阻止人们加载通过link
标签提供的CSS。他们的浏览器已经在您的页面加载时对其进行了缓存。
您可以使用您介绍的结构,并使用style
标签通过服务器端包含项传递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>
现在,所有这些都已经说完了-我不确定您为什么要想要执行任何此类操作。网络设计为开放式-共享代码和技术是HTML,CSS和JavaScript如此成功的很大一部分。试图隐藏您的技术不会阻止任何想要“窃取”您的人,并且可能会导致您网站的性能和稳定性问题。