从非根位置引用时我的资产所需的绝对路径


Absolute paths needed for my assets when referenced from a non-root location

我一直在寻找我试图解决的问题的答案,但似乎找不到明确的解决方案。

我正在使用WAMP服务器。当我创建一个新网站时,我在 WAMP 根目录中创建了一个子目录:C:'wamp'www例如 C:'wamp'www'somesite.com.au .对于每个站点构建,我总是有一个includes目录:C:'wamp'www'somesite.com.au'includes其中包含每个站点页面所需的所有全局代码段,例如包含HTML Head内容:

<meta charset="utf-8">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSS -->
<link rel="stylesheet" href="css/sitename.css">
<!--[if lte IE 9]><link rel="stylesheet" href="css/ie.css"><![endif]-->
<!-- All JavaScript at the bottom, except for... -->
<!--[if lt IE 9]><script src="js/libs/html5.js"></script><![endif]-->
<script src="js/libs/respond.js"></script>

问题是当我从子目录中的页面调用包含文件时,例如 使用 PHP C:'wamp'www'somesite.com.au'profile'foo.php包括:<?php include("../includes/template/html-head.php"); ?>包含的资产的任何路径,例如 找不到<link rel="stylesheet" href="css/style.css">,因为路径是相对于includes目录的。

有没有办法使用 PHP 或 .htaccess 使我的 includes 目录中资产的任何相对路径始终解析,无论我从哪里调用包含文件?我不想在上传到生产环境时修改任何代码,也不想使用 HTML <base> 元素。

请注意:我是一名前端开发人员,所以我的PHP/.htaccess技能非常基础。

干杯

我认为您正在寻找dirname函数和常量__FILE__

使用这两个项目,你可以一直知道你在哪里

$currentScriptDir = dirname(__FILE__);

注意:如果你在 PHP 5.3>= 下,有一个__DIR__直接是脚本所在的目录

您应该按绝对值链接到页面中的每个资产:

<link rel="stylesheet" href="localhost/yourfolder/css/style.css">

当然,您应该为要放入页面中的每个图像执行此操作。只需先定义一个ABSPATH常量,然后在应用程序中使用它。但是,如果您的图像是在样式表文件中定义的,则无需将它们定义为绝对,只需定义我在这里提到的样式表文件的绝对路径即可。

禁足:例如,通常具有用户友好 URL 的 Web 应用程序应使用绝对路径指向其数据。例如,我习惯于制作一个.htaccess文件并将每个调用返回到我的第一个页面,即 index.php,然后我将获取REQUEST_URI并将路径分成几部分,并决定我应该向我的用户显示哪个部分。这是ABSPATH的想法,我在我的核心课程的构造方法中定义了它。可以通过工作项目中的每个脚本访问它。我认为这是将数据发送到页面的唯一方法。

这是我最终为了让它工作而做的事情:

  1. 在根目录中创建了一个config.php文件,并在每个页面的顶部链接到该文件:

这是我config.php文件的内容:

<?php
/* Absolute paths to the site root */
define( 'ABSPATH', dirname(__FILE__) . '/' );
$path = '/Sitenamehere';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

上传到生产服务器时,我必须更新$path值。我宁愿不这样做,但不确定如何保持它的普遍性?

  1. 然后,对于指向我的包含文件中资产的任何链接,我像这样链接到它们:

    href="/css/style.css">">

一切正常,但不确定我的设置方式是否是最佳方法?另外,哪个更适合用于调用我的包含:

<?php include (ABSPATH . "/includes/global/html-element.php"); ?>

<?php include "includes/global/html-element.php" ?>

主要围绕页面性能。

干杯