如何通过.htaccess设置网站文档根目录及解决PHP绝对路径问题?
解决方案
1. 用.htaccess配置站点根与路径基准
在你用作临时预览的目标目录下创建.htaccess文件,通过重写规则将该目录设为站点的有效根目录,统一路径解析逻辑:
RewriteEngine On # 填写当前目录相对于主机账户根的路径(比如文件存在于/preview/demo-site/就写这个) RewriteBase /preview/demo-site/ # 可选:如果需要路由转发(比如单页场景),添加以下规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L]
这个配置会让所有以/开头的链接(例如/css/style.css)自动指向你设置的目录,而非主机账户的根目录。
2. PHP端定义动态站点根常量,统一引用逻辑
为了让PHP引用和资源链接自动适配当前目录,在head.php的最顶部添加常量定义:
// 自动获取当前脚本所在目录相对于主机根的路径,适配任意部署位置 define('SITE_ROOT', rtrim(dirname($_SERVER['SCRIPT_NAME']), '/'));
之后所有资源引用和PHP文件包含都通过这个常量拼接路径:
- CSS/JS资源引用:
<link rel="stylesheet" href="<?php echo SITE_ROOT; ?>/css/bootstrap.min.css"> <script src="<?php echo SITE_ROOT; ?>/js/main.js"></script> - 复用文件引用:
<?php include SITE_ROOT . '/menu.php'; ?> <?php include SITE_ROOT . '/footer.php'; ?>
无论你把整个目录搬到虚拟主机的哪个位置,SITE_ROOT都会自动匹配当前目录路径,无需手动修改任何链接。
3. 注意事项
- 确认虚拟主机允许使用
.htaccess且开启了RewriteEngine(主流虚拟主机默认支持); - 如果动态获取路径出现异常,也可以直接手动硬编码常量值(比如
define('SITE_ROOT', '/preview/demo-site')),适配临时预览的快速需求。
内容的提问来源于stack exchange,提问作者Kris Hunt
相关产品推荐
相关产品推荐

