ThinkPHP5框架引入的css等外部資源文件沒有生效


靜態資源文件一般是放在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,不使用也可,本質上都是一樣的。不能配置虛擬主機可參考最后的方法

虛擬主機的配置

  1. 找到服務器 apache\conf\extra\httpd-vhosts.conf 文件,配置以下內容

    最重要的就是標記的兩行,可見我把 服務器名(ServerName)test.io 映射到了 我的項目文件 test目錄
  2. 配置host文件,完成域名 test.io 到本地服務器 127.0.0.1 的映射
    用管理員打開 C:\Windows\System32\drivers\etc\hosts 文件,在末尾添加
  3. 重啟服務器,在瀏覽器輸入 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 項目文件作為根目錄使用。代碼使用的根目錄與項目實際根目錄不在同一位置。所以,引入的文件不能正確的顯示出來。

解決方法

  1. 修改虛擬主機對應的目錄為DocumentRoot "C:/xampp/htdocs/www/test/public/,把根目錄直接映射到public目錄,重啟服務器。這樣就可以在 html 文件里直接使用 /static 來引入靜態資源文件。
    最終的效果:

  2. 修改html 引入外部文件的代碼為:<link rel="stylesheet" href="/public/static/test.css">,這樣也能使用引入的文件,不過自然是麻煩一些。
    最終的效果:

如果沒有配置虛擬主機,在瀏覽器直接輸入的 127.0.0.1,可根據顯示出的內容,自行判斷所處的位置,然后調整代碼或修改配置文件。
例如:如果出現的是這種

發現直接定位的是項目主文件。那么就需要在代碼中這樣使用:<link rel="stylesheet" href="/public/static/test.css">。然后點擊 public/ 即可正確顯示。反之,如果直接顯示出了頁面,就不用再加 /public 了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM