![](/img/trans.png)
[英]Web browser not displaying the index.html in the htdocs directory - Apache
[英]Why doesn't Apache allow access to files outside the web root from within index.html?
我的項目有以下組織,但無法從我的 HTML 代碼中訪問相關的 CSS 和 JavaScript 文件,除非我創建了從文件到我的 Web 根目錄的符號鏈接。
這是 Apache 的正常行為還是問題出在其他地方?
如果我刪除符號鏈接並更正src
屬性中的路徑,則這些外部文件的內容將無法訪問。
userName@hostName:/var/www/test$ tree
.
├── css
│ └── style.css
├── html
│ ├── code.js -> ../js/code.js
│ ├── index.html
│ ├── jquery-3.2.1.js -> ../libs/jquery-3.2.1.js
│ └── style.css -> ../css/style.css
├── js
│ └── code.js
└── libs
└── jquery-3.2.1.js
4 directories, 7 files
userName@hostName:/var/www/test$ less html/index.html
<!doctype HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="./style.css">
<title>Test</title>
</head><!-- head -->
<body>
<h1>LOCAL TESTING SITE..</h1>
</body><!-- body -->
<script src="./code.js"></script>
</html><!-- html -->
html/index.html (END)
^ 作品
userName@hostName:/var/www/test$ tree
.
├── css
│ └── style.css
├── html
│ ├── index.html
├── js
│ └── code.js
└── libs
└── jquery-3.2.1.js
4 directories, 4 files
userName@hostName:/var/www/test$ less html/index.html
<!doctype HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="../css/style.css">
<title>Test</title>
</head><!-- head -->
<body>
<h1>LOCAL TESTING SITE..</h1>
</body><!-- body -->
<script src="../js/code.js"></script>
</html><!-- html -->
html/index.html (END)
^ 不起作用
userName@hostName:/var/www/test$ tree -p
.
├── [drwxrwxr-x] css
│ └── [-rw-rw-r--] style.css
├── [drwxrwxr-x] html
│ ├── [lrwxrwxrwx] code.js -> ../js/code.js
│ ├── [-rw-rw-r--] index.html
│ ├── [lrwxrwxrwx] jquery-3.2.1.js -> ../libs/jquery-3.2.1.js
│ └── [lrwxrwxrwx] style.css -> ../css/style.css
├── [drwxrwxr-x] js
│ └── [-rw-rw-r--] code.js
└── [drwxrwxr-x] libs
└── [-rw-rw-r--] jquery-3.2.1.js
4 directories, 7 files
^ 文件權限
userName@hostName:/etc/apache2$ less sites-available/test.local.conf
<VirtualHost *:80>
ServerAdmin myEmail@email.com
DocumentRoot /var/www/test/html
ServerName test.local
ErrorLog ${APACHE_LOG_DIR}/test.local.error.log
CustomLog ${APACHE_LOG_DIR}/test.local.access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
sites-available/test.local.conf (END)
^ 虛擬主機配置
userName@hostName:/var/www/test$ uname -v
#35~16.04.1-Ubuntu
userName@hostName:/var/www/test$ apache2 -v
Server version: Apache/2.4.18 (Ubuntu)
^ 系統信息
出於安全原因,Apache 不會(默認情況下)允許 HTTP 請求訪問網站根目錄之外(上方)的文件。
您的文檔根設置為: DocumentRoot /var/www/test/html
,因此所有文件(包括非 HTML 文件)都需要在此目錄中。 僅僅因為該目錄被稱為html
,不要誤以為它應該只包含 HTML 文件。
userName@hostName:/var/www/test/html$ tree
.
├── css
│ └── style.css
├── js
│ └── code.js
├── libs
│ └── jquery-3.2.1.js
└── index.html
3 directories, 4 files
userName@hostName:/var/www/test/html$ less index.html
<!doctype HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="css/style.css">
<title>Test</title>
</head><!-- head -->
<body>
<h1>LOCAL TESTING SITE..</h1>
</body><!-- body -->
<script src="js/code.js"></script>
</html><!-- html -->
index.html (END)
您會看到所有文件都存儲在/html
目錄或其子目錄中。 JS 和 CSS 文件的 HTML 鏈接已更新以引用正確的文件位置。
如果 Apache 允許訪問根目錄之外(上方)的文件,您將遇到重大的安全問題。
例如,假設某人有一個執行以下操作的 HTML 文件:
<!doctype HTML>
<html>
<head>
<title>Test</title>
</head>
<body>
<a href="../../../var/private/supersecret.conf">link to secret config file</a>
</body>
</html>
這將允許用戶訪問他們想要在服務器上的任何隨機文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.