靜態資源文件一般是放在public目錄里,不只是css,只要是靜態資源文件都沒有顯示出來。
(更好的閱讀體驗可訪問 這里 )
問題陳述
文件結構
文件內容
三個文件分別為:Index.php、test.html、test.css
//Index.php
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return $this->fetch();
}
}
<!--index.html-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>This is the test</title>
<link rel="stylesheet" href="/static/test.css">
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
/*test.css*/
h1 {
color: red;
}
為了方便問題陳述,使用了虛擬主機。集成環境為xampp,不使用也可,本質上都是一樣的。不能配置虛擬主機可參考最后的方法
虛擬主機的配置
- 找到服務器
apache\conf\extra\httpd-vhosts.conf
文件,配置以下內容
最重要的就是標記的兩行,可見我把 服務器名(ServerName)test.io 映射到了 我的項目文件 test目錄 - 配置host文件,完成域名 test.io 到本地服務器 127.0.0.1 的映射
用管理員打開C:\Windows\System32\drivers\etc\hosts
文件,在末尾添加
- 重啟服務器,在瀏覽器輸入 http://test.io/public/ 就直接訪問到了我們的test項目文件。
出現的問題
也就才開始顯示出本文的重點:我們之前引入的 test.css 沒有生效
原因分析
我們在引入 css 文件的時候,使用的是<link rel="stylesheet" href="/static/test.css">
可見,我們默認是把 public目錄 作為根目錄來使用的( /static 在 public 目錄下)
而我們在配置虛擬主機的時候,使用的是DocumentRoot "C:/xampp/htdocs/www/test/"
是把 test 項目文件作為根目錄使用。代碼使用的根目錄與項目實際根目錄不在同一位置。所以,引入的文件不能正確的顯示出來。
解決方法
-
修改虛擬主機對應的目錄為
DocumentRoot "C:/xampp/htdocs/www/test/public/
,把根目錄直接映射到public目錄,重啟服務器。這樣就可以在 html 文件里直接使用 /static 來引入靜態資源文件。
最終的效果:
-
修改html 引入外部文件的代碼為:
<link rel="stylesheet" href="/public/static/test.css">
,這樣也能使用引入的文件,不過自然是麻煩一些。
最終的效果:
如果沒有配置虛擬主機,在瀏覽器直接輸入的 127.0.0.1,可根據顯示出的內容,自行判斷所處的位置,然后調整代碼或修改配置文件。
例如:如果出現的是這種
發現直接定位的是項目主文件。那么就需要在代碼中這樣使用:<link rel="stylesheet" href="/public/static/test.css">
。然后點擊 public/ 即可正確顯示。反之,如果直接顯示出了頁面,就不用再加 /public 了。