.htaccess重写规则下本地资源加载失败问题求助
解决CSS文件引入路径错误问题
项目目录结构
root |--vendors |--mdi |--css |--materialdesignicons.min.css |--typicons |--css |--typicons.css |--view |--header.php
header.php 代码情况
原始代码
<link rel="stylesheet" href="vendors/mdi/css/materialdesignicons.min.css">
使用dirname(__DIR__)修改后的代码
<link rel="stylesheet" href="<?php echo dirname(__DIR__) ?>/vendors/mdi/css/materialdesignicons.min.css">
错误信息
Not allowed to load local resource: file:///C:/xampp_v7_3_27/htdocs/mywebsite/vendors/mdi/css/materialdesignicons.min.css
问题原因
dirname(__DIR__)返回的是服务器本地文件系统的物理路径,浏览器会将其解析为file://协议的本地资源。但网站运行在HTTP/HTTPS协议下,浏览器出于安全限制,禁止跨协议加载资源,因此触发报错。
解决方案
方案1:使用网站根目录绝对路径(推荐)
直接以/开头指定资源路径,该路径基于网站根目录,不受URL重写规则影响:
<link rel="stylesheet" href="/vendors/mdi/css/materialdesignicons.min.css"> <link rel="stylesheet" href="/vendors/typicons/css/typicons.css">
注意:如果项目部署在网站子目录(比如htdocs/mywebsite),需要在路径开头追加子目录名称,例如/mywebsite/vendors/...
方案2:通过PHP生成网站根URL
利用服务器环境变量生成网站的HTTP/HTTPS根URL,确保资源路径使用网页协议:
// 生成网站基础URL $base_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST']; // 若项目在子目录,追加子目录路径,示例:$base_url .= '/mywebsite'; ?> <link rel="stylesheet" href="<?php echo $base_url; ?>/vendors/mdi/css/materialdesignicons.min.css"> <link rel="stylesheet" href="<?php echo $base_url; ?>/vendors/typicons/css/typicons.css">
方案3:修正相对路径
基于header.php所在的view目录,使用../回到项目根目录,再指向资源:
<link rel="stylesheet" href="../vendors/mdi/css/materialdesignicons.min.css"> <link rel="stylesheet" href="../vendors/typicons/css/typicons.css">
内容的提问来源于stack exchange,提问作者Nathan DevX
相关产品推荐
相关产品推荐

